Ошибка IdentityServer "invalid_client" всегда возвращалась

Я пытаюсь использовать 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"
                }
            }
        };
    }
}

Это результат, который я всегда получаю.

Postman error

Я использую почтальон, чтобы попробовать Auth Server, но я всегда получаю эту ошибку. Я читал другие решения, но, похоже, никто не работает, я не знаю, что еще попробовать.

Приветствия.

Ответ 1

Ваш запрос будет следующим:

  • Заголовок полномочий с clientId/clientSecret. carbon/secret в вашем случае. 1
  • В теле. username/password shoud be alice/password в вашем случае. Если вам не нужно обновлять токены, вы можете исключить область offline_access из запроса. 2

Ответ 2

Просто добавьте client_secret: secret в ваше тело. Это будет работать!

enter image description here

Ответ 3

Поздний ответ, но для меня это произошло после обучения IdentityServer 4 при попытке войти с именем пользователя и паролем. Я использовал код из первого урока (используя учетные данные клиента) и изменил клиент для использования паролей. После этого я продолжал получать эту ошибку.

Чтобы исправить это, в проекте IdentityServer, config.cs в GetClients метод, установите AllowedGrantTypes в GrantTypes.ResourceOwnerPassword и изменить ClientId от client к ro.client (или независимо от имени клиента в том, что вы используете в программе проекта Client. CS).