观看此video,它在OAuth2中详细说明客户端应用程序首先必须从授权服务器获取授权授权,然后在能够访问资源服务器之前使用该授权获取令牌。该补助金的目的是什么?为什么不在用户使用他/她的用户名和密码登录后立即给客户提供令牌?
答案 0 :(得分:3)
因为它对某些应用程序类型更安全。
您所描述的是所谓的授权 - 代码流。它通常用于" classic" Web应用程序,只有后端需要访问资源服务器。访问令牌的授权代码交换发生在后端,访问令牌永远不会离开它。交换只能进行一次,此外还需要客户端ID和密码(存储在后端)。
单页面应用程序通常使用隐式流程,其中访问令牌直接在URL中传递到前端。
在此处查看更多信息: IdentityServer Flows
编辑:问:"鉴于您必须获得赠款才能获得令牌,我仍然不知道它是如何更安全的。为什么需要两件事而不是一件事来访问资源?如果有人窃取了令牌,他们无论如何都可以访问资源 - stackjlei"
"偷"访问令牌将独立于您的应用程序如何获取它。但是,在后端窃取访问令牌要比在前端窃取困难得多。
授权代码也通过前端传递到后端,但是有人截获并使用它的风险很小:
答案 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