web-dev-qa-db-ja.com

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

私はpostmanを使用して認証サーバーを試していますが、常にそのエラーが発生します。私は別の解決策を読みましたが、うまくいくシームはありません。他に何を試すかわかりません。

乾杯。

15
arosgab

client_secret:secretをBodyに追加するだけです。それが動作します!

enter image description here

あなたのリクエストは次のようにする必要があります:

  1. clientId/clientSecretを含む認証ヘッダー。あなたの場合、carbon/secret。 1
  2. 体に。 username/passwordあなたの場合はalice/passwordである必要があります。トークンを更新する必要がない場合は、offline_accessリクエストからのスコープ。 2
1
Artem

遅い答えですが、ユーザー名とパスワードを使用してログインしようとしたときに、IdentityServer 4チュートリアルに従ってこれが発生しました。最初のチュートリアルのコード(クライアント資格情報を使用)を使用し、パスワードを使用するようにクライアントを変更しました。その後、このエラーが何度も発生しました。

これを修正するには、IdentityServerプロジェクトのconfig.csGetClientsメソッドで、AllowedGrantTypesGrantTypes.ResourceOwnerPasswordに設定し、ClientIdclientからro.clientに変更します(または、使用しているクライアント名は何でもクライアントプロジェクトのprogram.cs内)。

0
yesman