gpt4 book ai didi

angular - 尝试验证 Azure AD token 时收到错误 "IDX10511: Signature validation failed"

转载 作者:行者123 更新时间:2023-12-04 12:36:44 27 4
gpt4 key购买 nike

我有一个 Angular 10 应用程序,它使用 oidc 对 Azure AD 进行身份验证。它成功获取 token ,然后对 WCF 服务(.net framework 4.7)进行 REST 调用,发送它从 Azure 收到的 token 。 WCF 服务中的验证代码失败并显示以下错误:
IDX10511:签名验证失败。尝试过的键:'System.Text.StringBuilder'。 child :'System.String'。捕获异常:'System.Text.StringBuilder'。 token :'System.IdentityModel.Tokens.Jwt.JwtSecurityToken'。
如果我使用 Auth0 进行身份验证,则相同的 WCF 代码能够验证来自 Auth0 的 jwt,没有错误。
下面是我的 oidc 客户端的 UserManagerSettings:

          this.stsSettings = {
authority: "https://login.microsoftonline.com",
client_id: myclientId,
redirect_uri: `${myclientRoot}signin-callback`,
scope: "openid profile email",
response_type: "code",
loadUserInfo: false, // setting loadUserInfo to true causes error because CORS blocks the call to the user info endpoint.
post_logout_redirect_uri: `${myclientRoot}signout-callback`,
silent_redirect_uri: `${myclientRoot}assets/silent-callback.html`,
metadata: {
issuer: `${mystsAuthority}/${mytenantId}/v2.0`,
authorization_endpoint: `${mystsAuthority}/${mytenantId}/oauth2/v2.0/authorize`,
token_endpoint: `${mystsAuthority}/${mytenantId}/oauth2/v2.0/token`,
"jwks_uri": `https://login.microsoftonline.com/${mytenantId}/discovery/v2.0/keys`,
}
我在 WCF 服务中的 C# 代码来验证 token
                JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler();

JwtSecurityToken jwtToken = tokenHandler.ReadToken(token) as JwtSecurityToken;

if (jwtToken == null)
{
return null;
}


IConfigurationManager<OpenIdConnectConfiguration> configurationManager = new ConfigurationManager<OpenIdConnectConfiguration>($"{Properties.Settings.Default.ValidIssuer.TrimEnd('/')}/.well-known/openid-configuration", new OpenIdConnectConfigurationRetriever());

OpenIdConnectConfiguration openIdConfig = await configurationManager.GetConfigurationAsync(CancellationToken.None);

var validationParameters = new TokenValidationParameters()
{
LifetimeValidator = LifetimeValidator,
ValidAudiences = new[] { Properties.Settings.Default.CommaDelimitedValidAudiences },
AudienceValidator = AudienceValidator,
ValidIssuer = Properties.Settings.Default.ValidIssuer,
ValidateLifetime = true,
RequireExpirationTime = true,
ValidateIssuer = true,
ValidateAudience = true,
ValidateIssuerSigningKey = false,
IssuerSigningKeys = openIdConfig.SigningKeys,
RequireSignedTokens = false
};

SecurityToken securityToken;
var principal = tokenHandler.ValidateToken(token, validationParameters, out securityToken);

return principal;
}

catch (Exception ex)
{
return null;
}
异常发生在代码 tokenHandler.ValidateToken(token, validationParameters, out securityToken);我尝试了各种在线建议、在 Azure 中添加范围、“0 字节前缀”的解决方法等,但它们没有奏效。
我已经在这太久了,我的想法已经用完了。
请帮忙。
谢谢,

最佳答案

我张贴这个以防万一它会帮助别人。
我主要通过在 Azure AD 中添加一些额外配置来解决这个问题。我转到“公开 API”并添加了一个新范围(保留所有默认值并将“myapi”放在“范围名称”、“管理员同意显示名称”和“管理员同意描述”字段中。然后单击“添加”一个客户端应用程序”,输入我的应用程序的客户端 ID(可以在概述中找到),勾选授权范围复选框,然后单击“添加应用程序”。完成此操作后,范围有一个类似于“api://09098082309823009ljo24”的条目/myapi”,我复制了它。然后我将它添加到我的 oidc 客户端的 UserManagerSettings 的范围中。这个值成为我的 token 中的受众,您可能需要验证您的 token 。

关于angular - 尝试验证 Azure AD token 时收到错误 "IDX10511: Signature validation failed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63865103/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com