无法在Identity Server中对用户进行身份验证

时间:2019-03-31 11:05:12

标签: postgresql asp.net-core asp.net-identity identityserver4

我正在尝试通过 / connect / token 端点在Identity Server 4中对用户进行身份验证。我要填写邮递员的所有必填字段:

  • grant_type
  • 用户名
  • 密码
  • client_id
  • client_secret

,我总是收到“ invalid_client ”回复。

我在下表中插入了值:

  • AspNetUsers
  • 客户
  • ClientGrantTypes
  • ClientSecrets

对于PasswordHash列中的表AspNetUsers,我添加了用SHA256哈希的哈希密码。在ClientGrantTypes中,我添加了GrantType,其值为'password',并插入了正确的ClientId。

这是我的ConfigureServices的样子:

public void ConfigureServices(IServiceCollection services)
{
    string connectionString = "Server=192.168.1.108; Port=5432; Database=Users; User Id=postgres;Password=RandomPassword123";
    var migrationsAssembly = typeof(Startup).GetTypeInfo().Assembly.GetName().Name;

    services.AddIdentityServer()
        .AddConfigurationStore(options =>
        {
            options.ConfigureDbContext = builder =>
            {
                builder.UseNpgsql(connectionString, action =>
                {
                    action.MigrationsAssembly(migrationsAssembly);
                });
            };
        })
        .AddAspNetIdentity<Users>().AddConfigurationStore(options=>
        {
            options.ConfigureDbContext = builder =>
            {
                builder.UseNpgsql(connectionString, action =>
                {
                    action.MigrationsAssembly(migrationsAssembly);
                });
            };
        }).AddDeveloperSigningCredential();


    services.AddEntityFrameworkNpgsql();
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}

我正在努力弄清自己在做什么错,因此将不胜感激。

编辑

我包括了日志记录。这是我在邮递员中拥有的屏幕截图: http://i.imgur.com/Sk78V2y.png

这是Identity Server的完整日志:

  

[21:25:46调试] IdentityServer4.Hosting.EndpointRouter请求路径   / connect / token匹配端点类型令牌

     

[21:25:46调试] IdentityServer4.Hosting.EndpointRouter端点   已启用:令牌,已成功创建处理程序:   IdentityServer4.Endpoints.TokenEndpoint

     

[21:25:46信息]   IdentityServer4.Hosting.IdentityServerMiddleware调用   IdentityServer端点:用于的IdentityServer4.Endpoints.TokenEndpoint   / connect /令牌

     

[21:25:46调试] IdentityServer4.Endpoints.TokenEndpoint启动令牌   请求。

     

[21:25:46调试] IdentityServer4.Validation.ClientSecretValidator   开始客户端验证

     

[21:25:46调试]   IdentityServer4.Validation.BasicAuthenticationSecretParser开始   解析基本身份验证机密

     

[21:25:46调试]找到IdentityServer4.Validation.SecretParser解析器   秘密:BasicAuthenticationSecretParser

     

[21:25:46调试] IdentityServer4.Validation.SecretParser秘密ID   找到:琉球

     

[21:25:46调试] IdentityServer4.EntityFramework.Stores.ClientStore   在数据库中发现的琉球:假

     

[21:25:46错误] IdentityServer4.Validation.ClientSecretValidator否   找到ID为“ Ryukote”的客户。流产

日志让我感到困惑,因为有些东西不正确。可以通过查看我提供的Postman屏幕截图来确认。

1 个答案:

答案 0 :(得分:1)

错误来自BasicAuthenticationSecretParser,因此我认为您对令牌端点的请求中可能包含基本授权标头

Authorization: Basic Ryukote:password

这是IdentityServer从那里获取客户端ID“ Ryukote”的地方。

从您的请求中删除授权标头。