次のようにIdentityModelのDiscoveryClient
を使用してGETを実行すると、以下のエラーが発生します。
var discoveryResponse = await DiscoveryClient.GetAsync("https://localhost/IdentityServer");
発行者名が権限と一致しません: https:// localhost/identityserver
ターゲットURLは、IIS IdentityServer4で有効になっているASP.NET Core Webアプリケーションです。クライアントアプリケーションは、同じマシンで実行されている従来のASP.NET Webアプリケーションです。
どうやら、GETはdiscoveryResponse.Raw
の内容からわかるように、IdentityServerから値を取得できました。
{
"issuer": "https://localhost/identityserver",
"jwks_uri": "https://localhost/IdentityServer/.well-known/openid-configuration/jwks",
"authorization_endpoint": "https://localhost/IdentityServer/connect/authorize",
"token_endpoint": "https://localhost/IdentityServer/connect/token",
"userinfo_endpoint": "https://localhost/IdentityServer/connect/userinfo",
"end_session_endpoint": "https://localhost/IdentityServer/connect/endsession",
"check_session_iframe": "https://localhost/IdentityServer/connect/checksession",
"revocation_endpoint": "https://localhost/IdentityServer/connect/revocation",
"introspection_endpoint": "https://localhost/IdentityServer/connect/introspect",
"frontchannel_logout_supported": true,
"frontchannel_logout_session_supported": true,
"scopes_supported": [ "CustomIdentityResources", "profile", "openid", "MyAPI.full_access", "offline_access" ],
"claims_supported": [],
"grant_types_supported": [ "authorization_code", "client_credentials", "refresh_token", "implicit" ],
"response_types_supported": [ "code", "token", "id_token", "id_token token", "code id_token", "code token", "code id_token token" ],
"response_modes_supported": [ "form_post", "query", "fragment" ],
"token_endpoint_auth_methods_supported": [ "client_secret_basic", "client_secret_post" ],
"subject_types_supported": [ "public" ],
"id_token_signing_alg_values_supported": [ "RS256" ],
"code_challenge_methods_supported": [ "plain", "S256" ]
}
権限: https:// localhost/IdentityServer 発行者: https:// localhost/identityserver
それらは一致しません-大文字と小文字が区別されます。
サーバーコードをポリシーに合わせて変更できない場合は、ポリシー設定を変更して名前の不一致を許可できます。
たとえば、Azure Rest APIでDiscoveryClient
を使用しようとしていますが、issuer
はhttps://sts.windows.net/{{ tenant_id }}
ですが、エンドポイントはすべてhttps://login.Microsoft.com/{{ tenant_id }}
で始まります。
フィールドValidateIssuerName
およびValidateEndpoints
をfalseに設定するだけです。
var tenant_id = "8481D2AC-893F-4454-8A3B-A0297D301278"; // Made up for this example
var authority = $"https://login.microsoftonline.com/{tenant_id}";
DiscoveryClient discoveryClient = new DiscoveryClient(authority);
// Accept the configuration even if the issuer and endpoints don't match
discoveryClient.Policy.ValidateIssuerName = false;
discoveryClient.Policy.ValidateEndpoints = false;
var discoResponse = await discoveryClient.GetAsync();