Token签名验证失败报Token没有Kid

问题描述 投票:0回答:1

在设置 Web 服务以接收通过 B2C 调用生成的令牌时

https://login.microsoftonline.com/{tenant Id}/oauth2/v2.0/token
我不断收到 IDX10503 错误。

我在 Postman 中生成令牌,它使用 api 的

client Id
client secret
,一切都很好。但是当我将其发送到 api 的 jwt 令牌处理时,我收到下面详细说明的错误。请注意,我在示例中重复使用了
client secret
作为
key
。这是我的问题吗?如果是这样,我从哪里才能真正获得 B2C 的秘密?

我该如何解决这个问题?


错误

SecurityTokenSignatureKeyNotFoundException:IDX10503:签名验证失败。托肯没有孩子。 尝试的键:“[‘System.Text.StringBuilder’类型的 PII 已隐藏。有关更多详细信息,请参阅 https://aka.ms/IdentityModel/PII。]'。 TokenValidationParameters 中的键数:“1”。配置中的按键数量:“0”。

最小可重复代码
var secret = "{B2C Registered App Client Secret}";

var jwt = "eyJ0eXA...Z5zA";
var jwtSource = jwt.Replace("Bearer ", "");
var secretBytes = Encoding.ASCII.GetBytes(secret);

// Doesn't show the PII text, unclear why, but out of the scope for this error.
IdentityModelEventSource.LogCompleteSecurityArtifact = true;

// Validate
var TokenHandler = new JwtSecurityTokenHandler();
var validationParameters = new TokenValidationParameters
{
    ValidateIssuerSigningKey = true,
    ValidateAudience = false,
    ValidateIssuer = false,
    IssuerSigningKey = new Microsoft.IdentityModel.Tokens.SymmetricSecurityKey(secretBytes)
};

/* Exception thrown here */
var result = TokenHandler.ValidateToken(jwtSource, 
                                        validationParameters, 
                                        out Microsoft.IdentityModel.Tokens.SecurityToken validatedToken);

来自 Postman 的代币返还的 Jwt.IO 报告

{
  "typ": "JWT",
  "nonce": "MWR2cRS...CBAI_Bc",
  "alg": "RS256",
  "x5t": "9GmnyF...Lo7Y",
  "kid": "9GmnyF...Lo7Y"
}
jwt azure-ad-b2c bearer-token .net-7.0
1个回答
0
投票

我从哪里才能真正获得 B2C 的秘密?

  1. 访问 https://portal.azure.com
  2. 搜索
    B2C
  3. 选择您的
    B2C tenant
  4. 点击
    App registrations
  5. 选择您的
    App registrations
  6. 单击
    + New Client secret
    下的
    Certificates & secrets

使用新生成的客户端密钥

© www.soinside.com 2019 - 2024. All rights reserved.