Конечная точка интроспекции Identityserver4 медленная - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь использовать конечную точку самоанализа от identityserver 4, чтобы проверить, действителен ли мой токен, но вызов конечной точки занимает более или менее 2 секунд, это действительно медленно, если мне нужно проверять токен во время каждого запроса. У кого-нибудь есть такие же проблемы? Или есть лучшее, более быстрое решение для проверки токена? Заранее спасибо!! Вы можете найти мой код здесь =>

[HttpPost("[Action]")]
    public async Task<IActionResult> CheckToken([FromBody]string Token)
    {
        if(string.IsNullOrEmpty(Token))
        {
            return BadRequest("Provide Token");
        }

        var introspectionClient = new IntrospectionClient("http://localhost:5002/connect/introspect", "api1", "password");

        var response = await introspectionClient.SendAsync(new IntrospectionRequest { Token = Token });

        try
        {
            if (response.IsActive)
            {
                return Ok();
            }
            else
            {
                return BadRequest();
            }
        }
        catch (Exception exc)
        {
            return BadRequest();
        }
    }

Вот мой код реализации сервера идентификации =>

 services.AddIdentityServer()
                        .AddDeveloperSigningCredential()
                        .AddInMemoryCaching()
                        .AddInMemoryApiResources(Conf.GetApiResources())
                        .AddInMemoryClients(Conf.GetClients())
                        .Services.AddTransient<IResourceOwnerPasswordValidator, PasswordValidator>();

Моя конфигурация клиента и конфигурация API

public static class Conf
    {
        // clients that are allowed to access resources from the Auth server 
        public static IEnumerable<Client> GetClients()
        {
            // client credentials, list of clients
            return new List<Client>
            {
                new Client
                {
                    ClientId = "client",
                    AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,                  

                    // Client secrets
                    ClientSecrets =
                    {
                        new Secret("password".Sha256())
                    },
                    AllowedScopes = { IdentityServerConstants.StandardScopes.OpenId,IdentityServerConstants.StandardScopes.Profile,"api1"},
                    IdentityTokenLifetime=7200

                },
            };
        }

        // API that are allowed to access the Auth server
        public static IEnumerable<ApiResource> GetApiResources()
        {
            return new List<ApiResource>
            {
                //new ApiResource("api1","My API")

                new ApiResource("api1", "MyApi")
                {
                    ApiSecrets =
                    {
                        new Secret("password".Sha256())
                    },

                }
            };
        }
    }
...