OIDC - 使用 IdentityServer3 和 Spring Boot 实现 OAuth2

Posted

技术标签:

【中文标题】OIDC - 使用 IdentityServer3 和 Spring Boot 实现 OAuth2【英文标题】:OIDC - Implementing OAuth2 with IdentityServer3 and Spring Boot 【发布时间】:2020-06-11 04:41:17 【问题描述】:

我们的应用程序是一个 Spring Boot 应用程序,我们需要以 IdentityServer3 作为提供者来实现 OAuth2 授权。

但是,在一切设置正确后,当重定向到 SSO 系统的登录屏幕时,我们不断收到错误 The client application is not known or is not authorized.

使用postman,我们可以在单击“获取新访问令牌”时访问登录屏幕

使用AdvanceRestClient,我们得到与我们的 Spring Boot 应用程序相同的错误。

查看这两个工具的日志,我发现在 postman 上,请求会首先 POST 到 Access Token URL,而在 Spring Boot 安全性和 AdvanceRESTClient 上,它会生成一个指向 authorize URL 的 GET URI .

邮递员示例:

POST https://login.xxx.com.my/LoginHost/core/connect/token

AdvanceRESTClient 首次请求示例:

GET https://login.xxxx.com.my/LoginHost/core/connect/authorize?response_type=code&client_id=xxx.web&redirect_uri=https%3A%2F%2Fauth.advancedrestclient.com%2Foauth-popup.html&scope=openid%20email%20profile&state=XXX

这令人困惑。哪种行为是正确的?为什么会有不同?

希望任何人都可以提供帮助。谢谢。

* 更新 1 *

邮递员设置:

AdvanceRESTClient:

【问题讨论】:

当您没有发布完整代码、显示您正在实施的流程以及您如何实施流程时,我们该如何回答。请通读***.com/help/how-to-ask 并使用相关信息更新您的问题。 这里的问题不是关于代码,而是关于流程的实现。我们发现AdvanceRESTClient 流程类似于 Spring Boot 安全使用的流程,因此提出了问题。将发布两个工具中使用的配置 【参考方案1】:

查看两个客户端的控制台日志后,问题似乎是由redirect-url 引起的。将 AdvancedRestClient 上的重定向 url 更改为与邮递员设置匹配后,它就可以工作了。

【讨论】:

以上是关于OIDC - 使用 IdentityServer3 和 Spring Boot 实现 OAuth2的主要内容,如果未能解决你的问题,请参考以下文章

跳过 IdentityServer3 登录屏幕

IdentityServer3 和通过 OpenIDConnect 进行外部登录

流动客户端主题时如何在 C# HttpClient 中设置 OIDC/OAuth 不记名令牌

如何在流动客户端主题时在C#HttpClient中设置OIDC / OAuth承载令牌

身份服务器 3 用户会话生命周期

使用 IdentityServer3 生成访问令牌,无需密码