【问题标题】:Client validation in OAuth 2.0 Authorization Grant Flow without client secret in Mobile apps移动应用程序中没有客户端密码的 OAuth 2.0 授权授予流程中的客户端验证
【发布时间】:2020-08-29 11:13:59
【问题描述】:

在使用授权码授权类型为移动应用程序实现 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)。它是否有助于以某种方式识别应用程序??

【问题讨论】:

    标签: oauth-2.0 identityserver4 pkce


    【解决方案1】:

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

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

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

    【讨论】:

    • 我不确定移动设备调试,但我们不能使用 adb 驱动器或移动浏览器中的其他东西来跟踪请求响应,就像我们可以在 chrome 开发人员窗口中跟踪一样。如果是,我可以从那里轻松地从 url 中提取客户端 ID。
    • 这样的工具使用了中间人技术。如果对手在您上网时这样做,您将在浏览器中收到“不安全”消息。
    • 我在 SPA(单页应用程序)中见过,没有任何服务器,也只使用客户端 ID。我们可以在没有 MIMA 的情况下在我们的 chrome 开发窗口中查看这些 spa 流量。
    • Chrome 在将您的请求发送到授权服务器之前对其进行加密。 Chrome 可以在开发窗口中显示加密前的请求。如果对手截获您的消息,他将无法读取它,因为它是使用服务器公钥加密的,并且需要授权服务器私钥来解密消息。
    • 我有一个关于问题的更新。请看看你是否可以澄清一下
    猜你喜欢
    • 2020-03-01
    • 2020-09-03
    • 2016-06-17
    • 1970-01-01
    • 2022-07-06
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    相关资源
    最近更新 更多