【问题标题】:OAuth client authentication for public clients公共客户端的 OAuth 客户端身份验证
【发布时间】:2014-03-12 00:31:12
【问题描述】:

早上好,

我花了很多时间研究 OAuth 2 规范及其不同的授权和客户端类型。但是,对于如何使用客户端机密对公共客户端(即移动安装的应用程序)进行身份验证的问题,我还没有找到令人满意的答案。

我还查看了 FB 和 Google,发现它们使用 bundleID (iOS) 和公共签名密钥 (Android)。

谁能解释一下客户端身份验证在这些情况下的工作原理、它如何补充/符合 OAuth 2.0 规范以及如何避免安全漏洞(即反编译移动应用代码)?

谢谢尼克

【问题讨论】:

    标签: oauth-2.0 authentication


    【解决方案1】:

    简短的回答:公共客户端未在 OAuth 2.0 中进行身份验证。

    规范明确区分了机密(通常是 webapp)和公共(通常是嵌入式)客户端。机密客户端使用具有最大安全性的授权代码授予方案并进行身份验证。然而,安装在用户设备上的应用程序,尤其是 javascript 应用程序无法正确隐藏其 client_secret 和接收到的授权码,因此标准为它们做了一个简化的场景:隐式授权流。

    在这种情况下,不需要 client_secret 或 code => 令牌交换。请注意,它在设计上本质上不太安全,因为嵌入式应用程序本身本质上不太安全,因此简单地省略了无法保护安全性的步骤。客户端仅使用其 client_id 而没有 client_secret 并立即从授权端点检索令牌而不是授权代码。通过使用 https、用户对请求的显式授权并将结果返回到已注册的 redirect_uri,该场景中仍然存在一些安全性。请注意,出于安全原因,规范禁止在这种情况下发布刷新令牌。

    【讨论】:

    • 谢谢。也许是为了澄清我的问题:我从 OAuth 的角度了解公共客户端的安全限制,这基本上导致了两种选择:要么不信任应用程序(即不提供对敏感数据/活动的访问),要么实施额外的OAuth 之外的安全措施。如果选项 1 不是有效选项(因为我不想限制移动功能),为了将移动应用程序视为机密客户端,存在哪些额外的安全措施。因此,我提到了 Google 和 Facebook,它们似乎应用了其他方式(bundleID)。
    • 啊,对不起,我误会了。坦率地说,我对这个 bundleID 和类似的移动扩展不是很熟悉,我们需要其他人来帮助你。
    • 正如我们在这些 cmets 中所讨论的,我似乎有点误解了这个问题,无法正确回答。你能提出一个合适的解决方案吗?我应该删除这个答案吗?
    猜你喜欢
    • 2013-01-12
    • 2015-08-22
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    相关资源
    最近更新 更多