我有一个使用来自外部应用程序的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'.
我有一个使用来自外部应用程序的ADFS令牌对API进行身份验证的任务,因此我创建了两个应用程序,一个是MVC应用程序,比如说A,它与SSO一起使用进行了身份验证...