Справочные токены сертификата подписи IdentityServer4 - PullRequest
0 голосов
/ 02 октября 2018

Получение ошибок, когда API пытается проверить ссылочный токен.Наш идентификационный сервер будет обслуживать только эталонные токены.Зачем нужен сертификат подписи?Ошибка связана с набором ключей.

System.InvalidOperationException: Policy error while contacting the discovery endpoint https://****.net/.well-known/openid-configuration: Keyset is missing
   at IdentityModel.AspNetCore.OAuth2Introspection.PostConfigureOAuth2IntrospectionOptions.GetIntrospectionEndpointFromDiscoveryDocument(OAuth2IntrospectionOptions Options)
   at IdentityModel.AspNetCore.OAuth2Introspection.PostConfigureOAuth2IntrospectionOptions.InitializeIntrospectionClient(OAuth2IntrospectionOptions Options)
   at IdentityModel.AspNetCore.OAuth2Introspection.OAuth2IntrospectionHandler.LoadClaimsForToken(String token)
   at IdentityModel.AspNetCore.OAuth2Introspection.OAuth2IntrospectionHandler.HandleAuthenticateAsync()
   at Microsoft.AspNetCore.Authentication.AuthenticationHandler`1.AuthenticateAsync()
   at Microsoft.AspNetCore.Authentication.AuthenticationService.AuthenticateAsync(HttpContext context, String scheme)
   at IdentityServer4.AccessTokenValidation.IdentityServerAuthenticationHandler.HandleAuthenticateAsync()
   at Microsoft.AspNetCore.Authentication.AuthenticationHandler`1.AuthenticateAsync()
   at Microsoft.AspNetCore.Authentication.AuthenticationService.AuthenticateAsync(HttpContext context, String scheme)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Cors.Infrastructure.CorsMiddleware.Invoke(HttpContext context)
   at Ips.Middleware.SerilogMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application)

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

Вы можете остановить возвращение ключевой информации из DiscoveryEndpoint, установив IdentityServerOptions в IdentityServer:

options.Discovery.ShowKeySet = false;

Просмотр реализации PostConfigureOAuth2IntrospectionOptions.InitializeIntrospectionClient:

    private async Task<IntrospectionClient> InitializeIntrospectionClient(OAuth2IntrospectionOptions Options)
    {
        string endpoint;

        if (Options.IntrospectionEndpoint.IsPresent())
        {
            endpoint = Options.IntrospectionEndpoint;
        }
        else
        {
            endpoint = await GetIntrospectionEndpointFromDiscoveryDocument(Options).ConfigureAwait(false);
            Options.IntrospectionEndpoint = endpoint;
        }

        IntrospectionClient client;
        if (Options.IntrospectionHttpHandler != null)
        {
            client = new IntrospectionClient(
                endpoint,
                headerStyle: Options.BasicAuthenticationHeaderStyle,
                innerHttpMessageHandler: Options.IntrospectionHttpHandler);
        }
        else
        {
            client = new IntrospectionClient(endpoint);
        }

        client.Timeout = Options.DiscoveryTimeout;
        return client;
    }

Вы можетеизбежать вызова на GetIntrospectionEndpointFromDiscoveryDocument, установив свойство IntrospectionEndpoint на OAuth2IntrospectionOptions

0 голосов
/ 05 октября 2018

Нашел решение.Вам не нужно вносить изменения в личность.Изменения в API.

 services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
    .AddIdentityServerAuthentication(
    IdentityServerAuthenticationDefaults.AuthenticationScheme, 
    //Null if you do not want to support jwt bearer tokens
    null,
    options =>
    {
      options.Authority = "https://yourIdentityServer.com";
      //This is the key
      options.DiscoveryPolicy.RequireKeySet = false;
      options.ClientId = "xxxx";
      options.ClientSecret = "xxxx";
    });
0 голосов
/ 03 октября 2018

Похоже, что-то проверяет документ обнаружения, чтобы убедиться, что он правильно сформирован.Вероятно, вы можете отключить эту проверку, переопределив политику, но, так как вам все равно понадобится ключ подписи для id_tokens, вы также можете установить учетные данные для подписи и проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...