0

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

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

更新: 根据https://auth0.com/docs/flows/concepts/auth-code-pkce,引入 PKCE 是因为客户端密码在移动设备上不安全。恶意应用程序可以捕获自定义 url。

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

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

4

1 回答 1

0

Oauth2 需要 SSL,所以不是每个人都可以读取您的 url 参数。URL 也在 SSL 请求中加密。您的客户端向 DNS 服务器询问 IP 地址。它将不带参数的请求 url 发送到 DNS。获得IP地址后,加密请求被发送到该IP地址。

公共客户不如私人客户安全,这是毫无疑问的。

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

于 2020-05-13T11:47:11.197 回答