【发布时间】:2020-07-15 07:44:07
【问题描述】:
我的任务是使用来自外部应用程序的 ADFS 令牌对 API 进行身份验证,因此我创建了两个应用程序,一个是 MVC 应用程序,比如说 A,它使用 SSO 凭据进行身份验证,另一个是是 WEB API 应用程序让我们说 B,所以在这里从 A,我正在使用 A 的 ADFS 令牌调用 B 的 API,但是,我得到了错误。有人帮我解决这个问题吗?
下面是应用B
中WEB API中的代码 ConfigurationManager<OpenIdConnectConfiguration> configManager =
new ConfigurationManager<OpenIdConnectConfiguration>(openIdConfig, new
OpenIdConnectConfigurationRetriever());
OpenIdConnectConfiguration config =
configManager.GetConfigurationAsync().GetAwaiter().GetResult();
result.EmailId = Claims.FirstOrDefault(claim => claim.Type == "upn").Value;
result.WindowsNTId = Claims.FirstOrDefault(claim => claim.Type == "unique_name").Value;
var utc0 = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
result.TokenCreatedOn = utc0.AddSeconds(Convert.ToInt64((Claims.FirstOrDefault(claim =>
claim.Type == "iat").Value)));
result.TokenExpiresOn = utc0.AddSeconds(Convert.ToInt64((Claims.FirstOrDefault(claim =>
claim.Type == "exp").Value)));
// Use System.IdentityModel.Tokens.Jwt library to validate the token
JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler();
var tokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
ValidateIssuer = true,
ValidIssuer = config.Issuer,
IssuerSigningKeys = config.SigningKeys,
ValidateAudience = true,
ValidAudience = expectedAudience
};
SecurityToken validatedToken;
try
{
var claimsPrincipal = tokenHandler.ValidateToken(RawData, tokenValidationParameters,
out validatedToken);
}
catch (Exception ex)
{
}
以下是异常消息。
IDX10501: Signature validation failed. Unable to match key:
kid: 'System.String'.
Exceptions caught:System.Text.StringBuilder'.
token: 'System.IdentityModel.Tokens.Jwt.JwtSecurityToken'.
【问题讨论】:
标签: oauth-2.0 jwt azure-active-directory openid-connect adfs