在设置 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);
{
"typ": "JWT",
"nonce": "MWR2cRS...CBAI_Bc",
"alg": "RS256",
"x5t": "9GmnyF...Lo7Y",
"kid": "9GmnyF...Lo7Y"
}
我从哪里才能真正获得 B2C 的秘密?
B2C
B2C tenant
App registrations
App registrations
+ New Client secret
下的
Certificates & secrets
使用新生成的客户端密钥