【发布时间】:2020-04-28 06:04:34
【问题描述】:
我正在使用 dotnet core (.NET Core) 3.1 和 IdentityServer4 包。我有一个希望与 Identity Server 4 集成的 SPA,因此我将沿着使用 PKCE 的 Authorization Code 授权类型的路径前进。我了解这种授权类型的基本概念,但是我不明白如何将用户名/密码换成授权码。这是我的理解。
- SPA 向 /authorize 端点发出 GET 请求,类似于
http://localhost:5000/connect/authorize?client_id=js&redirect_uri=http://localhost:5003/callback.html&response_type=code&scope=openid profile api1&state=8636d5233f77413584799be6cafe03a7&code_challenge=FbNm1tMkaRMzcSBv4_d5Rpq4VNaqyINVkCAcHsZkKV0&code_challenge_method=S256&response_mode=query - 这会返回一个 302 重定向到 http://localhost:5000/Account/Login,我认为它应该是由身份验证服务器托管的登录屏幕。
- 用户提交他们的凭据,身份验证服务器验证凭据并返回另一个 302 重定向到给定的重定向 URL,在这种情况下为 http://localhost:5003/callback.html。重定向 url 应包含生成的授权码和查询字符串中提供的状态。
- SPA 验证状态,然后向 /token 端点发出请求,该端点包含在标头中:authorization=Basic Y2xpZW50OnNlY3JldA== 和查询字符串中:grant_type=authorization_code, code=授权代码, redirect_uri=http://localhost/redirect
- 身份验证服务器返回一个有效的令牌。
我已经完成了第 1 步和第 2 步(还没有 UI,但这并不重要)。调用 /authorize 是有效的。我收到了有效的 302 响应。我卡住的地方是第 3 步和第 4 步。我是否需要编写一个端点来生成 授权代码 并返回包含它的 302 重定向,或者这是否已经内置到 Identity Server 4 中(像 /authorize 和 /token 端点)?
我整理了一些我在网上找到的例子,包括这个https://identityserver4.readthedocs.io/en/latest/quickstarts/4_javascript_client.html。似乎没有任何使用这种授权类型的完整示例。我还在我的创业公司中加入了一些测试资源、客户和用户。
services.AddIdentityServer()
.AddDeveloperSigningCredential()
.AddInMemoryApiResources(Config.GetAllApiResources())
.AddInMemoryClients(Config.GetClients())
.AddTestUsers(Config.GetUsers());
感谢您提供的任何帮助,至少将我推向正确的方向。
【问题讨论】:
标签: .net-core oauth-2.0 identityserver4 openid-connect