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を使用して認証サーバーを試していますが、常にそのエラーが発生します。私は別の解決策を読みましたが、うまくいくシームはありません。他に何を試すかわかりません。
乾杯。
あなたのリクエストは次のようにする必要があります:
clientId
/clientSecret
を含む認証ヘッダー。あなたの場合、carbon
/secret
。 username
/password
あなたの場合はalice
/password
である必要があります。トークンを更新する必要がない場合は、offline_access
リクエストからのスコープ。 遅い答えですが、ユーザー名とパスワードを使用してログインしようとしたときに、IdentityServer 4チュートリアルに従ってこれが発生しました。最初のチュートリアルのコード(クライアント資格情報を使用)を使用し、パスワードを使用するようにクライアントを変更しました。その後、このエラーが何度も発生しました。
これを修正するには、IdentityServerプロジェクトのconfig.cs
、GetClients
メソッドで、AllowedGrantTypes
をGrantTypes.ResourceOwnerPassword
に設定し、ClientId
をclient
からro.client
に変更します(または、使用しているクライアント名は何でもクライアントプロジェクトのprogram.cs内)。