使用本机应用程序(Android)保护Oauth2中的身份验证代码
这个问题几乎与我们无关 我正在Android上实现Oauth2应用程序。我想做SSO(单点登录),我担心AppLink会保护自动化代码 本机应用程序通过浏览器启动授权请求,然后接收包含授权代码的授权响应。根据,代码在URL内传递: 找到HTTP/1.1 302 地点:https://client.example.com/cb?code=SplxlOBeZQQYbYS6WxSbIA&state=xyz 授权代码是一条敏感信息,因为它允许客户端获取访问令牌和刷新令牌,然后访问受保护的资源 为了保护该代码,本机应用程序必须实现https方案重定向(&)。在Android上,这必须使用assetlinks.json文件完成 但根据相关问题,Android上的应用程序链接似乎不是100%安全的,因为操作系统可能无法验证https方案 在这种情况下,我们应该如何实现Oauth2授权代码钩子 编辑 根据@benjamin anwser的说法,AppLink不是为了安全。但是,相关的威胁用例如下:安装了恶意应用程序,并使用“SSO Cookie”获取使用本机应用程序(Android)保护Oauth2中的身份验证代码,android,oauth-2.0,deeplink,nativeapplication,android-customtabs,Android,Oauth 2.0,Deeplink,Nativeapplication,Android Customtabs,这个问题几乎与我们无关 我正在Android上实现Oauth2应用程序。我想做SSO(单点登录),我担心AppLink会保护自动化代码 本机应用程序通过浏览器启动授权请求,然后接收包含授权代码的授权响应。根据,代码在URL内传递: 找到HTTP/1.1 302 地点:https://client.example.com/cb?code=SplxlOBeZQQYbYS6WxSbIA&state=xyz 授权代码是一条敏感信息,因为它允许客户端获取访问令牌和刷新令牌,然后访问受保护的资源 为了保护
Auth code
并将其与AT+RT
交换。在我看来,这个过程中没有任何东西可以阻止这种情况:如果applink不是出于安全考虑,授权服务器如何知道此应用程序是恶意应用程序?
注意:所谓SSO Cookie,我指的是在Android上使用来执行SSO。保证安全性的不是AppLinks功能。配置
/.well-known/assetlinks.json
文件时,它允许透明重定向到应用程序,而无需任何用户交互。这意味着,通常显示的用于选择用户希望使用哪个应用程序来处理链接的模式对话框不会弹出。
如您所述,如果用户选择处理您与其他应用程序的链接,或者您的应用程序尚未安装,则可以绕过此机制。用户需要转到电话设置以实现此目的:
设置>应用程序>选择可处理授权代码链接的应用程序>默认打开>打开此应用程序中支持的链接>选择始终允许此方式第三方应用程序可以捕获您链接中包含的信息(在您的情况下为授权代码)
也就是说,它实际上是保证授权代码安全性的关键。您的服务器必须实施此功能,以减少不必要的授权代码重播。
关于使用PKCE的授权步骤的一点提示:
/authorization
端点。客户端保留随机字符串(不是散列),因为它将在步骤3中使用/Token
端点/token
请求,提取随机字符串并使用步骤2中存储的方法对其进行散列。然后服务器必须检查该散列字符串是否与步骤2中存储的字符串匹配。如果字符串相同,服务器将使用访问令牌和刷新令牌进行响应,否则返回错误/authorization
请求的客户端与发出/token
请求的客户端相同。因此,即使第三方应用程序捕获了您的授权码,它也不能使用它来检索访问令牌
有关更多信息,请参阅:和我同意您关于PKCE的看法,并且我非常了解相应的RFC。但我的使用案例如下:安装了一个恶意应用程序,并使用“SSO Cookie”获取身份验证代码并将其交换为AT+RT。在我看来,该过程中的任何内容都无法阻止这种情况。所谓SSO Cookie,我指的是在Android上使用来做SSO。