OAuth2 客户端 ID 和客户端密钥的安全性

菲利普·贾霍达

我正在开发一个通过OAuth2和 Spring保护的 REST API ,它将在 Android 应用程序(客户端)中使用。为了访问我的 API 的任何端点,需要一个 OAuth2 访问令牌并通过授权标头以类似于以下的方式移交给端点:

“授权”-“Bearer accesstokenhere”

为了获取访问令牌,必须提供用户名和密码,以及客户端 ID 和客户端密码(它们代表 Android 应用程序)。clientID 和 client secret 通过 Authorization Header 以类似的方式交给 token 端点,由 Spring 指定:

“授权”-“基本clientId:clientSecret”

如果客户端 ID 和客户端密钥与服务器上定义的客户端匹配,并且用户存在且密码正确,则返回访问令牌和刷新令牌。

现在我的问题是如何在 Android 应用程序中安全地存储我的 clientId 和客户端机密,确保对我的应用程序进行逆向工程的人无法访问它们?

另外,如果我要开发一个 iOS 应用程序(第二个客户端),从安全 POV 使用不同的客户端 ID 和客户端密码是否明智?

迪伦·莫利

你不能 - 即使有办法,我仍然可以检查线路上的有效载荷来确定值。请参阅本机应用程序OAuth 2.0 的第 8.5 节

作为分发给多个用户的应用程序的一部分静态包含的机密不应被视为机密机密,因为一个用户可能会检查其副本并了解共享机密。出于这个原因,以及 [RFC6819] 的第 5.3.1 节中所述的那些,不建议授权服务器要求使用共享密钥对公共本机应用程序客户端进行客户端身份验证,因为除了
已经提供的客户端识别之外,这几乎没有任何价值通过“client_id”请求参数。

您的客户端 id/secret 参数仅提供发出请求的应用程序的身份,因此建议您为 iOS 应用程序创建不同的客户端,无论是从安全隔离的角度还是您想要的任何分析收集有关您的应用程序的使用情况(例如,“您通过客户端 ID 检索了多少次登录尝试?”等)

但是,威胁行为者可以对您的设置进行逆向工程,获取您的客户端 ID + 机密,然后开始使用用户名/密码组合攻击您的令牌端点,以尝试对您的应用程序进行暴力破解。如果端点接受这些值并返回成功/失败代码,这对于试图破坏您的系统的人来说是一个有用的攻击向量。

当前推荐的方法是使用“授权代码流”

当前在本机应用程序中授权用户的最佳做法是在外部用户代理(通常是浏览器)中执行 OAuth 授权请求,而不是嵌入式用户代理(例如使用 Web 视图实现的用户代理)。

以前,本机应用程序对 OAuth 授权请求使用嵌入式用户代理(通常通过 Web 视图实现)是很常见的。这种方法有很多缺点,包括宿主应用程序能够复制用户凭据和 cookie,以及用户需要在每个应用程序中从头开始进行身份验证。有关使用嵌入式用户代理进行 OAuth 的更深入分析,请参阅第 8.12 节。”

看看AppAuth for Android了解更多信息,

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Spring安全性中的Oauth2客户端

来自分类Dev

了解OAuth 2.0中客户端ID和客户端密码的需求

来自分类Dev

Firebase不断在服务器配置中抛出OAuth2客户端ID

来自分类Dev

Quarkus Rest客户端和OAuth2

来自分类Dev

oauth2通过提供的客户端ID /密码通过db获取受信任的第三方客户端的访问令牌

来自分类Dev

使用WS安全性的Axis2 / Rampart Web服务的WCF客户端,无需客户端证书

来自分类Dev

在更新Android oAuth2客户端ID的SHA-1指纹时出现重复指纹错误

来自分类Dev

Django / tastypie实现中的OAuth 2.0客户端ID

来自分类Dev

Google OAuth-保密客户端ID

来自分类Dev

Google OAuth-存储客户端ID的位置

来自分类Dev

Google OAuth-保密客户端ID

来自分类Dev

Spring Boot + Oauth2客户端凭据

来自分类Dev

OAuth2客户端,已完成,从未调用

来自分类Dev

Spring Security,OAUTH2,动态客户端秘密

来自分类Dev

OAuth2客户端身份验证春季

来自分类Dev

带有Spring的OAuth2的Android客户端

来自分类Dev

OAuth2错误无效的客户端

来自分类Dev

OAuth2客户端,已完成,从未调用

来自分类Dev

了解OAuth2中的客户端

来自分类Dev

没有客户端密码的 OAuth2 工具

来自分类Dev

访问令牌和客户端ID / API密钥关系

来自分类Dev

公开的oAuth客户端

来自分类Dev

OAuth客户端Java

来自分类Dev

您能否解释 PKCE 的 oauth2 授权代码流如何工作以及为什么它为浏览器客户端提供更多安全性?

来自分类Dev

如何使用Spring在OAuth2身份验证中生成客户端密钥

来自分类Dev

在Google OAUTH2上找不到客户端密钥

来自分类Dev

OAuth2的客户端JS库如何维护安全身份验证?

来自分类Dev

Java的春季安全的OAuth2:接受通过POST客户端凭证

来自分类Dev

胖客户端会话管理和安全性

Related 相关文章

热门标签

归档