我正在更新我的应用程序以使用 Azure Active Directory 作为 OAuth 2.0 身份验证服务器。目前,我已成功使用授权代码授予类型并接收 access_token 和 id_token 值。
现在,我正在尝试验证返回的 id_token。我正在按照doco中概述的步骤进行操作,并且我能够找到用于签署 JWT 的公钥。例如,这是 Azure REST 端点返回的记录
据我了解,这些是可用的公钥。我可以将其过滤为 1(使用返回的 JWT header 中的 kids 值)。但我很难理解的是每个字段都代表什么。
我是否使用 n/e 字段来创建 SHA256 公钥的模数和指数值?我应该使用 x5c 值吗?抱歉,如果这是一个明显的问题,但是有没有关于给定上述值的文档,如何为其创建公钥?我是用 Java 做的,所以任何具体的内容都将不胜感激。
最佳答案
要验证 id_token 的签名,如果您使用 C# 进行开发,我们可以使用 JwtSecurityTokenHandler
类。您可以引用JsonWebTokenValidator.cs代码示例使用此类。为了方便起见,我也将此类复制到此处:
public class JsonWebTokenValidator
{
public JwtSecurityToken Validate(string token)
{
string stsDiscoveryEndpoint = "https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration";
ConfigurationManager<OpenIdConnectConfiguration> configManager = new ConfigurationManager<OpenIdConnectConfiguration>(stsDiscoveryEndpoint);
OpenIdConnectConfiguration config = configManager.GetConfigurationAsync().Result;
TokenValidationParameters validationParameters = new TokenValidationParameters
{
ValidateAudience = false,
ValidateIssuer = false,
IssuerSigningTokens = config.SigningTokens,
ValidateLifetime = false
};
JwtSecurityTokenHandler tokendHandler = new JwtSecurityTokenHandler();
SecurityToken jwt;
var result = tokendHandler.ValidateToken(token, validationParameters, out jwt);
return jwt as JwtSecurityToken;
}
}
关于Azure 公钥解释了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40778964/