IdentityServer“invalid_client”错误总是返回

Posted

技术标签:

【中文标题】IdentityServer“invalid_client”错误总是返回【英文标题】:IdentityServer "invalid_client" error always returned 【发布时间】:2017-04-24 07:44:52 【问题描述】:

我正在尝试使用 IdentityServer3,但不知道为什么我总是收到“invalid_client”错误,无论我做什么。

这是我正在使用的代码:

//Startup.cs (Auth c# project)
public void Configuration(IAppBuilder app) 
    var inMemoryManager = new InMemoryManager();
    var factory = new IdentityServerServiceFactory()
        .UseInMemoryClients(inMemoryManager.GetClients())
        .UseInMemoryScopes(inMemoryManager.GetScopes())
        .UseInMemoryUsers(inMemoryManager.GetUsers());

    var options = new IdentityServerOptions 
        Factory = factory,
        RequireSsl = false
    ;

    app.UseIdentityServer(options);

InMemoryManager 助手。

//InMemoryManager.cs
public class InMemoryManager 
    public List<InMemoryUser> GetUsers() 
        return new List<InMemoryUser> 
            new InMemoryUser 
                Username = "alice",
                Password = "password",
                Subject = "2",
                Claims = new [] 
                    new Claim("User name", "Alice")
                
            
        ;
    

    public IEnumerable<Scope> GetScopes() 
        return new[] 
            new Scope 
                Name = "api1",
                DisplayName = "API 1"
            
        ;
    

    public IEnumerable<Client> GetClients() 
        return new[] 
            new Client 
                ClientName = "Silicon on behalf of Carbon Client",
                ClientId = "carbon",
                Enabled = true,
                //AccessTokenType = AccessTokenType.Reference,

                Flow = Flows.ResourceOwner,

                ClientSecrets = new List<Secret> 
                    new Secret("secret".Sha256())
                ,

                AllowedScopes = new List<string> 
                    "api1"
                
            
        ;
    

这是我一直得到的结果。

我正在使用邮递员来尝试身份验证服务器,但我总是收到该错误。我已经阅读了其他解决方案,但似乎没有一个可行,我不知道还有什么可以尝试的。

干杯。

【问题讨论】:

前一周我遇到了这个错误的问题,但我们使用的是授权码授权,它与重定向 URI 有关 - 你能在日志中看到任何内容吗? 您是否启用并检查了日志?他们提供了很多信息 你使用的是什么流量。它是资源所有者吗? 与往常一样,启用日志记录以确定问题所在。 @arosgab 您能否发布一个回答您自己的问题的答案,显示 IdentityServer 配置和邮递员的请求详细信息?就像您提出答案一样,但现在使用正确的配置,以便在没有 invalid_client 错误的情况下发出请求。 【参考方案1】:

只需在您的 Body 中添加 client_secret: secret。它会起作用的!

【讨论】:

嗨@hitesh,它不适合我。我也面临同样的问题【参考方案2】:

迟到的答案,但对我来说,这是在 IdentityServer 4 教程之后尝试使用用户名和密码登录时发生的。我使用了第一个教程中的代码(使用客户端凭据),并修改了客户端以使用密码。之后,我不断收到此错误。

要修复它,在 IdentityServer 项目 config.cs 中,在 GetClients 方法中,将 AllowedGrantTypes 设置为 GrantTypes.ResourceOwnerPassword,并将 ClientIdclient 更改为 ro.client(或任何客户端name 是您在 Client 项目的 program.cs 中使用的名称)。

【讨论】:

你拯救了我的一天【参考方案3】:

您的请求应该如下:

    带有clientId/clientSecret 的授权标头。 carbon/secret 在您的情况下。 在正文中。 username/password 在您的情况下应该是 alice/password。如果您不需要刷新令牌,您可以从请求中排除 offline_access 范围。

【讨论】:

以上是关于IdentityServer“invalid_client”错误总是返回的主要内容,如果未能解决你的问题,请参考以下文章

IdentityServer4源码解析_1_项目结构

IdentityServer4源码解析_4_令牌发放接口

IdentityServer4源码解析_5_查询用户信息接口

IdentityServer4

我对IdentityServer4的初步了解

angular 接入 IdentityServer4