我有一个网站和一个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,但仍然有效地限制利率,有什么建议吗?
发布于 2019-01-22 05:44:32
由于移动应用程序安装在设备上,如果您配置了一个秘密,那么这个秘密对于移动应用程序的所有安装都是常见的。因此,破坏了秘密的目的。
你应该做动态注册。以下是步骤
{
"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"
}
{
"redirect_uri" : "OPTIONAL_FOR_CLIENT_CREDENTIALS",
"scope": "SPACE SEPARATED SCOPES",
"software_statement": "MANDATORY"
}
我的答案来源是曼宁出版的"oauth 2行动“。
https://stackoverflow.com/questions/46110635
复制相似问题