仅用于身份验证的隐式授权工作流程与授权代码授予的缺点是什么?

时间:2017-05-16 22:22:45

标签: oauth-2.0 jwt openid

对于经典的网络应用,我无法理解使用授权码授予与隐式流仅身份验证的优势?

说,有一个网络应用程序通过第三方Iaas提供商进行身份验证。 web-app只需要知道用户(由某个ID标识)是否经过身份验证。该网络应用程序不会访问任何第三方服务,因此无需为了授权目的拥有任何访问权限。

在这个例子中,我没有看到如何从IaaS直接进入Web浏览器的user_id(JWT令牌)不那么安全,那么通过Web后端获取相同的user_id?在这两种情况下都会建立一个会议。如果我在这种情况下使用隐式授权,我会松散什么?

2 个答案:

答案 0 :(得分:1)

取决于您的网络应用运行的位置。如果它完全在浏览器上运行(例如它是一个javascript应用程序或SPA),那么我会使用implicit流程,因为Authorization code授权已针对机密客户端进行了优化。

如果您的网络应用在服务器上运行,那么使用Authorization code授权会更安全,因为代币将从IaaS提供商发送( Auth服务器)直接访问Web应用程序服务器(客户端),而不是通过用户(资源所有者)浏览器。

答案 1 :(得分:1)

隐式流是一个遗留流,当时浏览器只能调用同一源服务器。使用隐式流时的问题之一是它在重定向中返回访问令牌。重定向可以是包含访问令牌的浏览器历史记录的一部分。此外,如果多个设备历史记录与您的浏览器同步,则会增加安全风险。

虽然在授权代码流(使用 PKCE) 中没有访问令牌作为 Url 的一部分,这使其更加安全。

您可以参考Is the OAuth 2.0 Implicit Flow Dead?了解更多详情