Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net core 如何使用Identity Server 4授权码授予类型流获取授权码_.net Core_Oauth 2.0_Identityserver4_Openid Connect - Fatal编程技术网

.net core 如何使用Identity Server 4授权码授予类型流获取授权码

.net core 如何使用Identity Server 4授权码授予类型流获取授权码,.net-core,oauth-2.0,identityserver4,openid-connect,.net Core,Oauth 2.0,Identityserver4,Openid Connect,我正在使用带有IdentityServer4包的dotnet core(.NET core)3.1。我有一个SPA,我希望与Identity Server 4集成,因此我将使用PKCE使用授权代码授权类型。我了解这种授权类型的基本思想,但是我不知道如何将用户名/密码交换为授权码。以下是我对它的理解 SPA向端点发出GET请求/授权端点,看起来像http://localhost:5000/connect/authorize?client_id=js&redirect_uri=http://loca

我正在使用带有IdentityServer4包的dotnet core(.NET core)3.1。我有一个SPA,我希望与Identity Server 4集成,因此我将使用PKCE使用授权代码授权类型。我了解这种授权类型的基本思想,但是我不知道如何将用户名/密码交换为授权码。以下是我对它的理解

  • SPA向端点发出GET请求/授权端点,看起来像
    http://localhost:5000/connect/authorize?client_id=js&redirect_uri=http://localhost:5003/callback.html&response_type=code&scope=openid 轮廓api1&状态=8636d5233f77413584799be6cafe03a7&代码挑战=FbNm1tMkaRMzcSBv4\u D5RPQ4VNAQYINVKCACHSKKV0&代码挑战方法=S256&响应模式=查询
  • 这将返回一个302重定向,我认为它应该是由auth服务器托管的登录屏幕
  • 在本例中,用户提交其凭据,身份验证服务器验证凭据并返回另一个302重定向到给定的重定向url。重定向url应在查询字符串中包含生成的授权代码和提供的状态
  • SPA验证该状态,然后向/token端点发出请求,该请求包含在头中:authorization=Basic Y2xpZW50OnNlY3JldA==和查询字符串中:grant\u type=authorization\u code,code=authorization code,redirect\u uri=
  • 身份验证服务器返回一个有效令牌
  • 我已经完成了步骤1和步骤2(还没有UI,但这还不重要)。调用/authorize正在工作。我得到了一个有效的302回复。我被困在第三步和第四步。我是否需要编写生成授权代码并返回包含该代码的302重定向的端点,或者这是已内置到Identity Server 4中的端点(如/authorize和/token端点)

    我在网上找到了很多例子,包括这一个。似乎没有任何完整的示例使用这种类型的授权类型。在我的启动中,我还包括了一些测试资源、客户端和用户

    services.AddIdentityServer()
        .AddDeveloperSigningCredential()
        .AddInMemoryApiResources(Config.GetAllApiResources())
        .AddInMemoryClients(Config.GetClients())
        .AddTestUsers(Config.GetUsers());
    
    感谢您提供的任何帮助,至少可以将我推向正确的方向。

    看看这个。特别是验证凭据的帐户内控制器

    有两个重要步骤:

  • 到身份服务器(默认情况下通过cookie)
  • 在PKCE的情况下,为了获得更好的体验,将加载到该负载。url包含由Identity server生成和管理的查询参数代码和状态

  • 对于步骤3,您确实需要为用户登录提供ui/endpoint

    IdentityServer4团队通过创建一个只需导入的模板来简化这一过程 以下是模板的链接-


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

    我没有考虑使用这些模板,而是参考了文档和示例。我将浏览其中一些,了解它们是如何实现的。从我在上一个答案中的评论来看,我没有考虑使用模板。我会看看这些,看看哪里出了问题。