2017-10-10 87 views
0

看到这个video,它在OAuth2中详细说明了客户端应用程序首先必须从授权服务器获得授权许可,然后在能够访问资源服务器之前使用该授权获取令牌。赠款的用途是什么?为什么不在用户用他/她的用户名和密码登录后马上给予客户令牌?为什么您需要授权许可才能直接授予令牌?

回答

3

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

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

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

查看更多在这里: IdentityServer Flows

编辑:问:“我还没有看到它是如何更安全的因为你必须有授权,以获得令牌为什么需要2而不是只有一件东西来访问资源?如果有人盗取令牌,他们可以访问资源 - stackjlei“

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

授权代码传送到后端也超过了前端,但风险是有人拦截,并使用它很小:

  1. 它只能进行一次交换。
  2. 您需要client-id和client-secret才能交换它。客户端秘密只在后端提供。
  3. 通常情况下,授权码将由您的后端立即交换到访问令牌。所以它的寿命只有几秒钟。之后有人获得使用的授权码并不重要。
+0

我还是不明白它是如何更安全的,因为你必须获得授予才能获得令牌。为什么需要2件事而不是只有1件事来访问资源?如果有人窃取了令牌,他们仍然可以访问资源 – stackjlei

1

在你的情况有可能是两台服务器的授权和资源之一。 它也可能只有一个,但让我们来想象这种情况。

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

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

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

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

+0

为什么要使用临时令牌?为什么不仅仅使用临时授权而且根本不使用令牌?我不明白这两个步骤如何使它更安全 – stackjlei