IdentityServer4をドッカーで設定しようとしていますが、動作させることができません。始めるために、私はアイデンティティサーバーのマニュアルのクライアント資格の例を取っ:Protecting an API using Client CredentialsIdentity Server 4とドッカー
IdentityServer
にConfigure
ではポート5001
にホストされているポート5000
WEBAPI
にホストされています方法私のWebApiのStartup.cs
ファイル私は次のことをしました(問題はおそらくここにあります):
app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
Authority = "http://web:5000",
RequireHttpsMetadata = false,
ApiName = "api1"
});
クライアント
とクライアント
// Everything is fine here...
var disco = await DiscoveryClient.GetAsync("http://localhost:5000");
var tokenClient = new TokenClient(disco.TokenEndpoint, "client", "secret");
var tokenResponse = await tokenClient.RequestClientCredentialsAsync("api");
// This does not work
var client = new HttpClient();
client.SetBearerToken(tokenResponse.AccessToken);
var response = await client.GetAsync("http://localhost:5001/identity");
問題は私のWEBAPIにおそらくある:
1)私はローカルホストに権限を設定した場合:5000を、私は内部サーバーを取得しますエラー:「このコンフィグレーションでlocalhost:5000が不明なのでコンフィグレーションを取得できません:http://localhost:5000/.well-known/openid-configuration '」
2)権限をhttp://web:5000に設定すると、認証エラーが発生します。「発行者の検証に失敗しました。発行者: 'http://localhost:5000'。一致しませんでした:validationParameters.ValidIssuer: 'http://web:5000'またはvalidationParameters.ValidIssuers "も意味がありますが、権限名を変更することが可能かどうかわかりませんか?また、IdentityServerプロジェクトでIssuerUri
を設定しようとしましたが、トン助ける
は私の最初の部分を壊しますクライアント:var disco = DiscoveryClient.GetAsync( "http:// localhost:5000");を待機します。エラー= "発行者名が権限と一致しません:foo" '私の編集を参照してください。 – Bidou
@Bidouあなたは正しい行であると確信していますか? 'DiscoveryClient.GetAsync'はGET要求を行い、応答を解析します。発行者の名前が変更された後は、すべてのトークンを新しいトークンに置き換える必要があります。 –
実際はちょっと疲れました。 'GetAsync'によって返された' DiscoveryResponse'を調べると、 'Raw'プロパティーにjsonレスポンスが設定されていることがわかります(' issuer'と 'tokenendpoint'がそこにあります)が、' Error'プロパティには上記の「発行者名が権限:fooと一致しません」というメッセージが表示されます。 TokenEndpointプロパティはnullです(未処理のjsonであっても)、次の行でこのプロパティを使用してTokenClientをインナランスするので、NullPointerExceptionが発生します。 – Bidou