该问题与AppLinks assetlinks.json appears not to be used for validation几乎没有关系
我正在Android上实现Oauth2应用。我想进行SSO(单点登录),并且对AppLink的安全性感到担忧。
本机应用程序通过浏览器发起一个授权请求,然后接收包含授权代码的授权响应。根据{{3}},该代码在URL中传递:
HTTP/1.1 302 Found
Location: https://client.example.com/cb?code=SplxlOBeZQQYbYS6WxSbIA&state=xyz
授权码是一条敏感的信息,因为它允许客户端获取访问令牌和刷新令牌,然后访问受保护的资源。
要保护该代码,本机应用必须实现https方案重定向(RFC6749#section-4.1.2和RFC8252#section-7.2)。在Android上,必须使用assetlinks.json文件
但是根据相关问题section-8.1,Android上的应用程序链接似乎并非100%安全,因为操作系统可能无法验证https方案。
在这种情况下,我们应该如何实现Oauth2授权代码挂钩?
根据@benjamin anwser,AppLink并非出于安全性考虑。但是,相关的威胁用例如下:已安装恶意应用程序,并使用“ SSO Cookie”获取Auth Code
并将其交换为AT+RT
。在我看来,此过程中没有什么可以阻止这种情况:如果applink出于安全性考虑,授权服务器如何知道此应用是恶意应用?
注意:SSO-Cookie的意思是使用linked at the top在Android上进行SSO。
答案 0 :(得分:2)
不是AppLinks功能可以保证安全性。配置/.well-known/assetlinks.json
文件时,它允许透明重定向到应用程序,而无需任何用户交互。这意味着通常不会出现的模式对话框会选择用户想要用来处理链接的应用程序。
如您所述,如果用户选择处理您与另一个应用程序的链接或尚未安装您的应用程序,则可以绕过此机制。用户需要转到电话设置才能实现此目的:
设置> 应用>选择可以处理授权代码链接的应用> 默认打开> 在此应用程序中打开受支持的链接>选择始终允许这样,第三方应用程序就可以捕获链接中包含的信息(在您的情况下为授权代码) em>。
话说回来,实际上是Proof Key for Code Exchange (PKCE)保证了授权代码的安全性。您的服务器必须实施此功能,以减轻不必要的授权码重播。 关于使用 PKCE 的OAuth授权步骤的一点提醒:
/authorization
端点。客户端保留随机字符串(不进行哈希处理),因为它将在步骤3中使用。/token
端点。/token
请求,提取随机字符串并使用步骤2中存储的方法对其进行哈希处理。然后服务器必须检查此散列字符串是否与存储在其中的字符串匹配。步骤2。如果字符串相同,则服务器以访问令牌和刷新令牌响应,否则返回错误。 PKCE 通过这种方式确保发出/authorization
请求的客户端与发出/token
请求的客户端是同一客户端。因此,即使第三方应用捕获了您的授权码,它也无法使用它来检索访问令牌。
有关更多信息,请参见:PKCE (rfc 7636)和OAuth 2.0 for Native Apps (rfc 8252)