首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保护我的公共oauth不被滥用,但允许匿名访问我的应用程序?

保护我的公共oauth不被滥用,但允许匿名访问我的应用程序?
EN

Stack Overflow用户
提问于 2017-09-08 07:10:41
回答 1查看 1.2K关注 0票数 3

我有一个网站和一个API。该网站允许匿名的人浏览目录,但你必须登录到发布的东西。

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

现在,对移动应用的新要求已经下降:该应用程序应该允许匿名用户浏览我们的目录。我不知道如何实现这一点,除非我们的API被滥用。

匿名OAuth访问

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

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

从公共端点删除OAuth

或者,我们可以一起从公共端点(即浏览目录)中删除OAuth,并且只需要OAuth来发布信息或管理帐户。但是我该如何保护API不被滥用呢?如果没有OAuth,我就不能基于客户端id来进行分级限制。

我不确定基于IP地址的速率限制是否有效.我们预计会有很多移动应用用户,我担心糟糕的(摩洛哥)移动通信提供商只需要几个IP地址就能拥有大量的手机用户。这很快就会耗尽我们设定的任何利率限制。

这是正确的吗?或者我能安全地限制移动用户的IP地址吗?

替代安全机制

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

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

EN

回答 1

Stack Overflow用户

发布于 2019-01-22 05:44:32

由于移动应用程序安装在设备上,如果您配置了一个秘密,那么这个秘密对于移动应用程序的所有安装都是常见的。因此,破坏了秘密的目的。

你应该做动态注册。以下是步骤

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

代码语言:javascript
复制
 {
 "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“,以交换开发人员提供的信息。这包含对于本机应用程序的所有安装都是常量的信息。
  2. 在用户设备上安装应用程序后,应用程序与授权服务器联系以进行动态注册。应用程序将以下内容发布到授权服务器

代码语言:javascript
复制
{
"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”调用令牌端点上的"POST“方法,并接收"access_token”。
  3. 客户端使用"access_token“访问"protected_resource”。

我的答案来源是曼宁出版的"oauth 2行动“。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46110635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档