Ошибка 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).