隐含授权超过授权代码授权的OAuth2有什么优势?
具体而言,我想知道为什么建议公共客户使用隐式授权,但授权代码授权不是。它们看起来非常相似,差别并不重要。
答案 0 :(得分:12)
授权代码步骤的好处如下(来自OAuth 2.0 spec 1.3.1):
授权码提供了一些重要的安全性好处 作为验证客户端和传输的能力 直接访问令牌到客户端而不通过它 资源所有者的用户代理,可能会将其暴露给他人, 包括资源所有者。
通常,如果您的客户端是服务器端(Web应用程序),则应使用授权代码授予。如果它是基于JavaScript的应用程序(客户端) - 隐式是合适的。对于移动应用程序,如果使用外部浏览器(未嵌入),则通常首选授权代码授予类型。
客户端机密仅适用于服务器端应用程序,因为客户端需要将秘密嵌入到软件中 - thus only secret for so long(可以进行逆向工程)。
答案 1 :(得分:1)
在两种情况下比较客户端操作,记住客户端 - 是您必须自己编写的软件。
如果Authorization code grant
客户端执行了规范中定义的步骤:
- 客户端从授权服务器的令牌请求访问令牌 端点,包括上一步中收到的授权码。什么时候 在发出请求时,客户端使用授权服务器进行身份验证。该 客户端包括用于获取授权代码的重定向URI 验证
- 授权服务器验证客户端,验证授权码, 并确保收到的重定向URI与用于重定向的URI匹配 客户在步骤(C)中。如果有效,授权服务器将以访问权限进行响应 令牌和可选的刷新令牌。
醇>
如果Implicit Grant
必须这样做:
- 接收访问令牌。
醇>
现在答案或多或少都是微不足道的:第一种方法中的代码量是未知的,但对于第二种方法而言几乎可以忽略不计。