/oauth/authorize 和 /oauth/token 在 Spring OAuth 中如何交互?

Posted

技术标签:

【中文标题】/oauth/authorize 和 /oauth/token 在 Spring OAuth 中如何交互?【英文标题】:How do /oauth/authorize and /oauth/token interact in Spring OAuth? 【发布时间】:2016-08-25 00:10:36 【问题描述】:

我正在深入研究 Spring OAuth,发现一些相互矛盾的信息。

具体来说,this tutorial 声明/oauth/token 端点在将刷新令牌授予客户端应用程序之前处理用户名和密码。相比之下,Spring OAuth Developer Guide 提到了 /oauth/authorize/oauth/token 端点,但并未具体说明它们的工作原理。

/oauth/authorize 是否 100% 执行username/password/nOtherFactors 检查,然后向/oauth/token 端点发送刷新令牌给客户端,以便客户端随后将刷新令牌发送给/oauth/token 端点?

还是全部由/oauth/token 端点处理?

/oauth/authorize/oauth/token 之间的关系对于不同的授权类型是否不同?怎么样?

【问题讨论】:

我已经从中删除了两个图像,其中图像主机已经死亡。如果你能再次拿到这些图片,请把它们放到官方CDN上。 【参考方案1】:

根据 OAuth 2.0 规范,授权和令牌端点有不同的用途。

授权端点是资源所有者(用户)登录并向客户端授予授权的地方(例如:在浏览器中运行的 Web 应用程序或在移动设备上运行的应用程序)。这通常用于资源所有者的用户代理(例如:浏览器)被重定向到身份服务器(授权服务器)进行身份验证的场景。资源所有者的用户代理将直接访问访问令牌。

令牌端点是客户端(例如:服务器端 API 或移动应用程序)调用以交换授权代码、客户端 ID 和客户端密钥以获取访问令牌的地方。在这种情况下,用户代理只提供了一个授权码,不能直接访问访问令牌。客户端是一个受信任方,可以从授权服务器访问客户端 ID 和客户端密码(这就是我提到服务器端 API 作为客户端的原因)。

请阅读this 有更好解释的文章。

【讨论】:

感谢您和 +1 提供带有链接的解释。当我有时间的时候,让我进一步研究一下。我很想知道对于不同的授权类型,这个 OP 的答案是否不同。但是,我不希望你写一篇关于它的论文。 太棒了!我知道这个答案已经有点老了,但是感谢您的简短解释!特别是如果使用 Spring Security 5 + OAuth2Client,则会获得大量端点就像那样 - 这使得基于这些库的应用程序更难理解和定制。

以上是关于/oauth/authorize 和 /oauth/token 在 Spring OAuth 中如何交互?的主要内容,如果未能解决你的问题,请参考以下文章

Oauth2 访问oauth/authorize/**出现 403

JHipster OAuth2 服务器 - /oauth/authorize 的登录页面

Spring OAuth2 - oauth/authorize 的自定义“OAuth Approval”页面

通过 /oauth/authorize 进行身份验证时跳过重定向到登录页面

Spring OAuth2 隐式流程 - 身份验证服务器不处理 POST /oauth/authorize 请求

facebook oauth/authorize 是不是被弃用?