我正在尝试建立一种验证我的令牌的方法。我正在使用Open Id Connect授权代码流从Azure Active Directory检索令牌。我得到的令牌是 access_token 和 id_token 。我正在使用.NET Core。
我的验证代码如下:
string stsDiscoveryEndpoint = "https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration";
var handler = new JwtSecurityTokenHandler();
ConfigurationManager<OpenIdConnectConfiguration> configManager = new ConfigurationManager<OpenIdConnectConfiguration>(stsDiscoveryEndpoint, new OpenIdConnectConfigurationRetriever());
OpenIdConnectConfiguration config = configManager.GetConfigurationAsync().Result;
try
{
TokenValidationParameters validationParameters = new TokenValidationParameters
{
ValidIssuers = new [] { "https://login.microsoftonline.com/tenantid/v2.0" },
ValidAudiences = new [] { "client-Id" },
ValidateAudience = true,
ValidateIssuer = true,
IssuerSigningKeys = config.SigningKeys,
ValidateLifetime = true
};
var tokenHandler = new JwtSecurityTokenHandler();
SecurityToken validatedToken = null;
tokenHandler.ValidateToken(token.AccessToken, validationParameters, out validatedToken);
return validatedToken != null;
}
catch (SecurityTokenInvalidSignatureException ex)
{
return false;
}
catch(SecurityTokenValidationException)
{
return false;
}
id
为access_token执行此方法时收到的错误消息是:
IDX10511:签名验证失败。尝试过的密钥:'Microsoft.IdentityModel.Tokens.X509SecurityKey,KeyId:CtAAALb-8NsDe333734859crfOc '。 小子:“ CtAAALb-8NsDe333734859crfOc”。 捕获的异常: ''
答案 0 :(得分:0)
access_token
听众是您的API还是Microsoft Graph /其他第三方服务?验证您(您的服务)所消费的令牌是有意义的,其他受众群体将自行处理。最重要的是,该JWT的签名可能对您不透明。