当您可以直接提供令牌时,为什么需要授权许可?

时间:2017-10-10 07:16:28

标签: oauth-2.0

观看此video,它在OAuth2中详细说明客户端应用程序首先必须从授权服务器获取授权授权,然后在能够访问资源服务器之前使用该授权获取令牌。该补助金的目的是什么?为什么不在用户使用他/她的用户名和密码登录后立即给客户提供令牌?

3 个答案:

答案 0 :(得分:3)

因为它对某些应用程序类型更安全。

您所描述的是所谓的授权 - 代码流。它通常用于" classic" Web应用程序,只有后端需要访问资源服务器。访问令牌的授权代码交换发生在后端,访问令牌永远不会离开它。交换只能进行一次,此外还需要客户端ID和密码(存​​储在后端)。

单页面应用程序通常使用隐式流程,其中访问令牌直接在URL中传递到前端。

在此处查看更多信息: IdentityServer Flows

编辑:问:"鉴于您必须获得赠款才能获得令牌,我仍然不知道它是如何更安全的。为什么需要两件事而不是一件事来访问资源?如果有人窃取了令牌,他们无论如何都可以访问资源 - stackjlei"

"偷"访问令牌将独立于您的应用程序如何获取它。但是,在后端窃取访问令牌要比在前端窃取困难得多。

授权代码也通过前端传递到后端,但是有人截获并使用它的风险很小:

  1. 只能换一次。
  2. 您需要客户端ID和客户端密钥才能进行交换。客户端密钥仅在后端提供。
  3. 通常,授权代码将由您的后端立即交换为访问令牌。所以它的寿命只有几秒钟。如果有人在事后获得使用过的授权码并不重要。

答案 1 :(得分:1)

在您的方案中,可能有两台服务器,一台授权服务器和一台资源服务器。 它也可能只有一个,但让我们想象一下这个场景。

授权服务器的目的是向已知客户端发布短期访问令牌。客户通过他们的CLientID和CLientSecret来识别自己。

授权服务器(AS)保存客户端及其机密列表,并进行首次检查以确保传递的值与其列表匹配。如果他们这样做,它会发出一个短暂的令牌。

然后客户端可以与资源服务器(RS)通信,而令牌有效。令牌过期后,如果授权服务器允许,则可以请求新的令牌或刷新过期的令牌。

这里的重点是安全性。通常,访问令牌在请求的Authorization标头中传递,并且该请求需要通过https以确保数据不会被盗。如果有人拿到访问令牌,他们只能使用它直到它过期,因此为什么令牌的短暂生命实际上非常重要。这就是为什么你不发出一个永不过期的令牌。

答案 2 :(得分:0)

您有不同类型的OAuth。类型不需要使用'grant'授权。它取决于谁是用户/应用程序,资源所有者和服务器API。

这样,您 - 作为用户 - 不会将密码发送到应用程序。该应用程序将仅使用授权令牌来访问您的资源。

我认为如果你想要更多细节,这个tuto是一件非常好的事情

https://www.digitalocean.com/community/tutorials/an-introduction-to-oauth-2