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

时间:2020-01-10 15:03:15

标签: .net-core oauth-2.0 identityserver4 openid-connect

我正在使用带有IdentityServer4软件包的dotnet核心(.NET Core)3.1。我有一个SPA,希望与Identity Server 4集成,所以我沿使用PKCE使用授权码授予类型的方法进行了研究。我了解这种授予类型的基本概念,但是我不了解如何将用户名/密码交换为授权码。这就是我的理解。

  1. SPA向/ authorization端点发出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. 这将返回到http://localhost:5000/Account/Login的302重定向,我认为这应该是由身份验证服务器托管的登录屏幕。
  3. 用户提交其凭据,身份验证服务器验证凭据,然后将另一个302重定向返回给定的redirect_url,在这种情况下为http://localhost:5003/callback.html。重定向网址应在查询字符串中包含生成的授权代码和提供的状态。
  4. SPA验证状态,然后向/ token端点发出请求,该请求包含在标头中:authorization = Basic Y2xpZW50OnNlY3JldA ==以及查询字符串中:grant_type = authorization_code,code = 授权码 >,redirect_uri = http://localhost/redirect
  5. 身份验证服务器返回有效令牌。

我已经完成了第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());

感谢您提供的任何帮助,至少可以将我推向正确的方向。

2 个答案:

答案 0 :(得分:1)

看看这个quickstart。特别是,帐户控制器中的login action用于验证凭据。

有两个重要步骤:

  1. Sign in到Identity Server(默认为cookie)
  2. Redirectview加载this javascript以获得更好的体验,以防PKCE。网址包含由身份服务器生成和管理的查询参数 code state

答案 1 :(得分:0)

对于第3步,您确实需要使用ui / endpoint进行用户登录

IdentityServer4团队通过创建一个可以导入的模板使此操作变得容易 这是模板的链接-https://github.com/IdentityServer/IdentityServer4.Templates

在这种情况下,我认为您需要is4ui模板