如何使用Identity Server 4的授权码授权类型流程获取授权码

3
我正在使用带有IdentityServer4包的dotnet core (.NET Core) 3.1。我有一个SPA,希望将其与Identity Server 4集成,因此我正在使用PKCE使用Authorization Code授权类型。我了解此授权类型的基本想法,但不了解如何交换用户名/密码以获取Authorization Code。以下是我的理解。
  1. 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
  2. 这会返回一个302重定向到http://localhost:5000/Account/Login,我假设这应该是由认证服务器托管的登录屏幕。
  3. 用户提交其凭据,认证服务器验证凭据并返回另一个302重定向到给定的redirect_url,http://localhost:5003/callback.html在这种情况下。重定向网址应包括在查询字符串中生成的Authorization Code和提供的状态。
  4. SPA验证状态,然后向/token端点发出请求,在标头中包括:授权= Basic Y2xpZW50OnNlY3JldA==,在查询字符串中包括:grant_type = authorization_code,code = Authorization Code ,redirect_uri = http://localhost/redirect
  5. 认证服务器返回有效令牌。
我已完成步骤1和2(还没有UI,但现在并不重要)。调用/authorize正在工作。我正在收到有效的302响应。我卡住了步骤3和4。我是否需要编写生成Authorization Code并返回包含它的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());

感谢您能够提供帮助,至少让我朝着正确的方向前进。
2个回答

0
请看这个快速入门。特别是Account控制器中验证凭据的登录操作
有两个重要步骤:
  1. 默认情况下,通过cookie登录身份服务器(登录)
  2. 重定向视图,以便在PKCE的情况下加载this javascript,获得更好的体验。URL包含查询参数codestate,由身份服务器生成和管理。

从我在之前的回答中的评论来看,我没有考虑使用模板。我会看一下这些并找出我的错误所在。 - Lydon

0

我之前没考虑使用模板,一直在查看文档和示例。我会运行几个示例来了解它们是如何实现的。 - Lydon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接