gpt4 book ai didi

api - 保护我的公共(public) oauth API 免受滥用,但允许从我的应用程序进行匿名访问?

转载 作者:行者123 更新时间:2023-12-02 03:01:09 25 4
gpt4 key购买 nike

我有一个网站和一个 API。该网站允许匿名用户浏览目录,但您必须登录才能发布内容。

我构建了一个公开相同功能的 API。该 API 由我们正在开发的移动应用程序使用,但我们也将允许其他开发人员使用该 API(即公开记录)。整个API目前需要OAuth(2.0)认证。为防止滥用,我们对每个 OAuth 客户端 ID/用户 ID 组合使用速率限制。

现在对移动应用程序的新要求已经下降:该应用程序应允许匿名用户浏览我们的目录。在不开放我们的 API 以供滥用的情况下,我不确定如何实现这一点。

匿名 OAuth 访问

第一个问题是允许匿名访问。如果我们仍然希望整个 API 受 OAuth 保护,那么我们的移动应用程序将必须使用客户端凭据授权类型(发布客户端 ID 和 key )。但是我们必须将客户端 ID 和密码存储在应用程序本身中。这是不安全的,因为它很容易被逆向工程。

或者,我们可以使用动态客户端注册。一旦安装了一个应用程序,它就会注册一个(未记录的)API 来为自己创建一个 OAuth 客户端。这里的问题是,如何保护客户端注册端点?又是秘钥?另外,这会导致注册大量 OAuth 客户端。

从公共(public)端点删除 OAuth

或者,我们可以从所有公共(public)端点中删除 OAuth(即浏览目录),并且只需要 OAuth 来发布内容或管理帐户。但是我该如何保护 API 免受滥用呢?没有 OAuth,我无法根据客户端 ID 进行速率限制。

我不确定基于 IP 地址的速率限制是否有效。我们预计会有很多移动应用程序用户,我担心蹩脚的(摩洛哥)移动电信提供商正在 NAT-ing 仅在几个 IP 地址后面的大量电话用户。这会很快耗尽我们设置的任何速率限制。

这是正确的吗?或者我可以安全地对移动用户的 IP 地址进行速率限制吗?

替代安全机制

除了 OAuth,我还可以实现不同的身份验证机制。允许我们的手机应用程序访问 API 的东西,它可以区分(和速率限制)不同的手机/用户,但对于仅从我们的移动应用程序二进制文件中提取共享 key 的人来说是安全的。

关于如何允许匿名访问我的 API 但仍然有效地限制速率有什么建议吗?

最佳答案

由于移动应用安装在设备上,如果您配置一个密码,那么该密码将对移动应用的所有安装都是通用的。这样一来,出轨的目的就 secret 了。

您应该进行动态注册。以下是步骤

  1. 开发人员使用受信任的权限预先配置以下信息。

 {
"software_id":"COMMON_VALUE_HERE",
"software_version": "OPTIONAL_BUILD_VERSION",
"client_name":"HUMAN_READABLE_CLIENT_NAME",
"client_uri":"OPTIONAL_FOR_CLIENT_CREDENTIALS",
"logo_uri":"OPTIONAL_FOR_CLIENT_CREDENTIALS",
"tos_uri":"OPTIONAL_TERMS_OF_USE"
}

  1. 可信机构生成“software_statement”以交换开发人员提供的信息。这包含对 native 应用程序的所有安装来说都是不变的信息。

  2. 在用户设备上安装应用后,应用会联系授权服务器进行动态注册。该应用将以下内容发布到授权服务器

{
"redirect_uri" : "OPTIONAL_FOR_CLIENT_CREDENTIALS",
"scope": "SPACE SEPARATED SCOPES",
"software_statement": "MANDATORY"
}

  1. 授权服务器验证“software_statement”中存在的信息,生成并返回特定于特定软件安装的“client_id”和“client_secret”。

  2. 客户端使用新收到的“client_id”和“client_secret”在 token 端点上调用“POST”方法,并收到一个“access_token”。

  3. 客户端使用“access_token”访问“protected_resource”。

我的回答来源是 Manning 出版的“oauth 2 in action”。

关于api - 保护我的公共(public) oauth API 免受滥用,但允许从我的应用程序进行匿名访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46110635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com