azure - 使用来自“jwks_uri”端点的值验证从 azure ad b2c 收到的令牌
问题描述
我从实用程序服务获取 azure 广告访问令牌,我想使用一些标准令牌验证参数来验证它,其中包括颁发者、受众和颁发者签名密钥。现在我有颁发者和受众,但我没有颁发者签名钥匙。
但是我已经使用 azure ad b2c 的 jwks_uri 端点提取了关键信息,这给了我一个 json 输出
{
"keys": [
{
"kid": "X5eXk4xyojNFum1kl2Ytv8dlNP4......",
"nbf": 1493763266,
"use": "sig",
"kty": "RSA",
"e": "AQAB",
"n": "tVKUtcx_n9rt5afY_2WFNvU6PlFMggCatsZ3l4RjKxH0jgdLq6CScb0P3ZGXYbPzXvmmL...."
}
]
}
我尝试仅使用 n 值作为键,但出现令牌验证失败的异常。现在我想知道如何获取颁发者签名密钥来验证令牌。n+e(字符串连接?)是一个解决方案吗?我看到了一个类似的问题Azure AD B2C - 令牌验证不起作用,但它没有回答我的问题,因此想知道在 .net 核心中执行此操作的确切方法。
解决方案
据我了解,您要验证访问令牌。如果是这样,我们可以使用 sdkSystem.IdentityModel.Tokens
来实现它。例如
var configurationManager = new ConfigurationManager<OpenIdConnectConfiguration>(
"https://testb2ctenant05.b2clogin.com/testB2CTenant05.onmicrosoft.com/v2.0/.well-known/openid-configuration?p=B2C_1_test",
new OpenIdConnectConfigurationRetriever(), new HttpDocumentRetriever());
CancellationToken ct = default(CancellationToken);
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
var discoveryDocument = await configurationManager.GetConfigurationAsync(ct);
var signingKeys = discoveryDocument.SigningKeys;
var validationParameters = new TokenValidationParameters
{
RequireExpirationTime = true,
RequireSignedTokens = true,
ValidateIssuer = true,
ValidIssuer = discoveryDocument.Issuer,
ValidateIssuerSigningKey = true,
IssuerSigningKeys = signingKeys,
ValidateLifetime = true,
};
var principal = new JwtSecurityTokenHandler()
.ValidateToken(token, validationParameters, out var rawValidatedToken);
推荐阅读
- javascript - Order object / Sql order by string 无法与对象一起正常工作
- jquery - JQuery用逗号动画数字计数器
- coordinates - 这里有普通 2D 数据(即非地球投影)的标准 CRS 名称吗?
- node.js - AWS lambda中的Highcharts Node-Export-Server引发错误
- python - Python + Pyinstaller - 无法加载 dynlib/dll
- javascript - 我如何一次为每个 li 元素设置样式?
- scripting - 在 New Relic 中绕过 SSO 身份验证
- python - 安装 Pip 但需要 setuptools 并出现语法错误
- python - 无法将参数传递给python中的函数
- machine-learning - XGboost Classifier 迭代训练