【发布时间】:2018-03-21 12:05:12
【问题描述】:
观看此video,它在 OAuth2 中详细说明了客户端应用程序首先必须从授权服务器获取授权授权,然后使用该授权获取令牌,然后才能访问资源服务器。赠款的目的是什么?为什么不在用户使用他/她的用户名和密码登录后立即给客户端令牌?
【问题讨论】:
标签: oauth-2.0
观看此video,它在 OAuth2 中详细说明了客户端应用程序首先必须从授权服务器获取授权授权,然后使用该授权获取令牌,然后才能访问资源服务器。赠款的目的是什么?为什么不在用户使用他/她的用户名和密码登录后立即给客户端令牌?
【问题讨论】:
标签: oauth-2.0
因为它对某些应用程序类型更安全。
您所描述的就是所谓的授权代码流。它通常用于“经典”Web 应用程序,其中只有后端需要访问资源服务器。访问令牌的授权代码交换发生在后端,并且访问令牌永远不会离开它。交换只能进行一次,此外还需要客户端 ID 和密码(存储在后端)。
单页应用程序通常使用隐式流,其中访问令牌直接在 URL 中传递到前端。
在此处查看更多信息: IdentityServer Flows
编辑: 问:“鉴于您必须获得授权才能获得令牌,我仍然不明白它如何更安全。为什么需要 2 件东西而不是 1 件东西访问资源?如果有人窃取了令牌,他们仍然可以访问资源 – stackjlei"
“窃取”访问令牌将独立于您的应用程序获取它的方式。但是,在后端窃取访问令牌比在前端要困难得多。
授权代码也通过前端传递到后端,但有人拦截和使用它的风险很小:
【讨论】:
您有不同类型的 OAuth。 On type 不需要使用“grant”授权。这取决于谁是用户/应用程序、资源所有者和服务器 API。
这样,您(作为用户)就不会将密码发送给应用程序。应用程序只会使用授权令牌来访问您的资源。
如果您想了解更多详细信息,我认为这个 tuto 是个好东西
https://www.digitalocean.com/community/tutorials/an-introduction-to-oauth-2
【讨论】:
在您的场景中,可能有两台服务器,一台授权服务器和一台资源服务器。 它也可能只有一个,但让我们想象一下这种情况。
授权服务器的目的是向已知客户端颁发短期访问令牌。客户端通过他们的 CLientID 和 CLientSecret 来识别自己。
授权服务器 (AS) 保存客户端列表及其机密,并首先检查以确保传递的值与其列表匹配。如果他们这样做了,它会发出一个短暂的令牌。
然后客户端可以在令牌有效的情况下与资源服务器 ( RS ) 对话。一旦令牌过期,可以请求一个新的,或者如果授权服务器允许,可以刷新过期的令牌。
这里的重点是安全性,通常,访问令牌在请求的授权标头中传递,并且该请求需要通过 https 以确保数据不会被窃取。如果有人以某种方式获得了访问令牌,他们只能使用它直到它过期,因此为什么令牌的短寿命实际上非常重要。这就是为什么你不会发行一个永不过期的令牌。
【讨论】: