我有一个Angular 4站点,我正在尝试使用Microsoft Graph隐式流来验证用户,然后使用令牌在另一个端点调用我们的API,所以我使用msal.js来获取访问令牌。
在我将访问令牌带到我的API端点并尝试对其进行验证后,该令牌无法生效。我收到了SignatureVerificationFailedException。
我的理解是访问令牌适用于Microsoft Graph API,而不适用于我的API,因此我无法对其进行有效操作。 (我可以用它来调用Graph API而没有问题)
如何使用可用于我的API但不能用于Microsoft Graph的msal.js获取访问令牌(而非id令牌)?谢谢!
我向API端点发送访问令牌而不是id令牌的原因是我想从令牌获取puid声明,这不适用于id令牌。
以下是我试图验证从客户端使用msal.js获取的访问令牌的原因
const string authority = "https://login.microsoftonline.com/common";
const string audience = "https://graph.microsoft.com";
string issuer = null;
string stsDiscoveryEndpoint = $"{authority}/v2.0/.well-known/openid-configuration";
List<SecurityToken> signingTokens = null;
var configManager = new ConfigurationManager<OpenIdConnectConfiguration>(stsDiscoveryEndpoint);
var config = await configManager.GetConfigurationAsync();
issuer = config.Issuer;
signingTokens = config.SigningTokens.ToList();
var tokenHandler = new JwtSecurityTokenHandler();
var validationParameters = new TokenValidationParameters
{
ValidAudience = audience,
ValidIssuer = issuer,
ValidateIssuer = false,
IssuerSigningTokens = signingTokens,
CertificateValidator = X509CertificateValidator.None
};
try
{
// Validate token.
SecurityToken validatedToken = new JwtSecurityToken();
var claimsPrincipal = tokenHandler.ValidateToken(jwtToken, validationParameters, out validatedToken);
var claimsIdentity = claimsPrincipal.Identity as ClaimsIdentity;
return ExtractAuthenticatedUserFromClaimsIdentity(claimsIdentity);
}
catch (SignatureVerificationFailedException)
{
throw;
}
谢谢,