Проверьте область JWT, используя предоставленные Microsoft библиотеки
У меня есть некоторый код, который работает, но я разочарован его подходом грубой силы и не могу найти лучшего решения нигде. У меня есть старое приложение, которое не может аутентифицировать токен в промежуточном программном обеспечении. Поэтому я должен сделать это с моей стороны.
Вот мой текущий код. (Это делает то, что мне нужно, чтобы я искал более стандартное решение.)
public static bool IsTokenValid(string token, out long xid)
{
var authDomain = ConfigurationManager.AppSettings["IdentityServerUrl"];
IConfigurationManager<OpenIdConnectConfiguration> configurationManager =
new ConfigurationManager<OpenIdConnectConfiguration>($"{authDomain}/.well-known/openid-configuration",
new OpenIdConnectConfigurationRetriever());
if (_openIdConfig == null)
{
_openIdConfig =
configurationManager.GetConfigurationAsync(CancellationToken.None).GetAwaiter().GetResult();
}
TokenValidationParameters validationParameters =
new TokenValidationParameters
{
ValidIssuer = authDomain,
ValidateAudience = false,
IssuerSigningKeys = _openIdConfig.SigningKeys,
};
SecurityToken validatedToken;
JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler();
ClaimsPrincipal principal;
try
{
principal = handler.ValidateToken(token, validationParameters, out validatedToken);
}
catch (Exception e)
{
return false;
}
var claims = principal.Claims;
var scopes = claims.Where(t => t.Type == "scope");
var requiredScope = ConfigurationManager.AppSettings["RequiredScope"];
if (scopes.FirstOrDefault(t => t.Value == requiredScope) == null)
{
return false;
}
if( ...other validation stuff, I'm not worried about... )
{
return true;
}
return false;
}