无法验证AAD访问令牌-IDX10511:签名验证失败

时间:2019-07-09 14:21:25

标签: azure azure-active-directory access-token

我正在尝试建立一种验证我的令牌的方法。我正在使用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 BUT下方的代码有效 访问令牌

不起作用

为access_token执行此方法时收到的错误消息是:

IDX10511:签名验证失败。尝试过的密钥:'Microsoft.IdentityModel.Tokens.X509SecurityKey,KeyId:CtAAALb-8NsDe333734859crfOc '。 小子:“ CtAAALb-8NsDe333734859crfOc”。 捕获的异常:  ''

1 个答案:

答案 0 :(得分:0)

access_token听众是您的API还是Microsoft Graph /其他第三方服务?验证(您的服务)所消费的令牌是有意义的,其他受众群体将自行处理。最重要的是,该JWT的签名可能对您不透明。

更多信息-https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/issues/812#issuecomment-456700813