OAuth 2.0授权授予流程中的客户端验证,而移动应用中没有客户端密码

时间:2020-05-13 09:59:28

标签: oauth-2.0 identityserver4 pkce

使用授权码授予类型为移动应用程序实现OAuth 2.0时,我们可以在注册应用程序时在身份提供程序上生成一个clientid。(我们不会为移动应用程序生成客户端密码)

我的问题是,身份服务器如何验证response_type = code&client_id = client_id的第一个请求是否来自正确的移动应用程序?由于客户端ID在URL中,因此任何人都可以使用它读取并将请求发送到授权服务器。

更新: 根据{{​​3}},由于客户端密码在移动设备上不安全,因此引入了PKCE。恶意应用程序可以捕获自定义网址。

现在,作为一名黑客,我可以使用向认证服务器(IS)注册的应用程序A的开发窗口流量监控移动默认浏览器来获取应用程序的客户端ID。我得到了他stackoverflow的客户ID,我在这里没有透露。我将创建一个移动恶意移动应用程序,该应用程序将注册实际移动应用程序A的自定义网址。此应用程序将使用相同的clientid和url以及PKCE挑战进行重定向。现在,IS将如何识别请求ID是否来自正确的客户端。由于如链接中所述,如果我能够注册恶意应用程序以捕获移动设备的自定义重定向url请求,那么我将能够捕获身份验证代码并使用恶意应用程序执行其余的工作流程。

Google在创建应用程序时采用捆绑包标识符(IOS)或应用程序签名(Android)。它有助于以某种方式识别应用程序吗?

1 个答案:

答案 0 :(得分:0)

Oauth2需要SSL,因此并非所有人都能读取您的url参数。网址也已在SSL请求中加密。您的客户端向DNS服务器询问IP地址。它将不带参数的请求url发送到DNS。获取IP地址后,加密的请求将发送到该IP地址。

公共客户比私人客户安全性低,对此毫无疑问。

关于“编辑”部分的答案: PKCE提供了额外的保护。首先,您必须生成一些随机值并计算该随机值的哈希值。在第一个请求中,您发送计算出的哈希值并获取代码。在第二个请求中,您发送代码和随机值。这样,如果advesary窃取了您的代码,他将无法获得令牌,因为他需要您的随机值。只有您知道用于创建哈希的随机值,因为如果advesary知道您的哈希,他将无法从哈希中计算随机值。当您向IS发送令牌请求时,IS会计算您的随机值的哈希值,并将其与您在代码请求中发送的哈希值进行比较。如果它们匹配,则可以证明您是询问代码的同一个人。

相关问题