Я пытаюсь использовать конечную точку самоанализа от 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())
},
}
};
}
}