无法针对 Microsoft Graph API 颁发的令牌验证 Azure AD B2C 的签名

时间:2021-02-23 14:47:45

标签: jwt azure-functions azure-ad-b2c azure-authentication

三天以来,我一直在为以下代码验证图形 API 令牌时遇到的异常寻找解决方案:

 var configManager = new ConfigurationManager<OpenIdConnectConfiguration>(
                            $"{_authenticationSettings.Authority}/.well-known/openid-configuration",
                            new OpenIdConnectConfigurationRetriever());
                        var config = await configManager.GetConfigurationAsync();
                        _validationParameters = new TokenValidationParameters
                        {
                            IssuerSigningKeys = config.SigningKeys,
                            ValidateAudience = true,
                            // Audience MUST be the app ID aka clientId
                            ValidAudience = _authenticationSettings.ClientId,
                            ValidateIssuer = true,
                            ValidIssuer = config.Issuer,
                            ValidateLifetime = true
                        };

var tokenHandler = new JwtSecurityTokenHandler();
var result = tokenHandler.ValidateToken(authHeader.Parameter, _validationParameters, out var jwtToken);

调用 ValidateToken 时发生异常,内容如下:

<块引用>

Microsoft.IdentityModel.Tokens.SecurityTokenInvalidSignatureException: 'IDX10511:签名验证失败。按键尝试: 'System.Text.StringBuilder'。孩子:'System.String'。例外 捕获:'System.Text.StringBuilder'。令牌: 'System.IdentityModel.Tokens.Jwt.JwtSecurityToken'。'

我真的没有理由这样做了。有解决此问题的想法或建议吗?

包是:

    <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.8.0" />
    <PackageReference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="6.8.0" />

即使是 this solution 也不是决定性的。

2 个答案:

答案 0 :(得分:0)

从 Graph API 验证令牌与标准 OIDC 令牌略有不同。

有关详细信息,请参阅以下内容: https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/issues/609

答案 1 :(得分:0)

Graph API 令牌不能也不应该被验证,因此签名验证失败。请参阅this answer on GitHub