IDX10500: проверка подписи не удалась. Не удалось разрешить securitykeyidentifier
Привет,
Я новичок в OAuth и пытаюсь реализовать его в своем приложении.
Я добавил проверяющую сторону, сославшись на [^] эта ссылка.
Как было предложено в ссылке, я не прикрепил никакого сертификата при создании проверяющей стороны.
Теперь в моем приложении этот код перенаправляет меня на страницу входа в AD FS, где пользователь вводит свои учетные данные.
AuthenticationContext authenticationContext = null; Uri redirectUri; Uri authorizationRequestURL; string clientID = string.Empty; string resourceUrl = string.Empty; resourceUrl = "https://lxi322.lxi.company.com"; redirectUri = new Uri("https://lxi322.lxi.company.com/CompanyLogin/SAML/AssertionConsumerService.aspx"); var config = WebConfigurationManager.OpenWebConfiguration("~/Configuration/web.config"); clientID = config.AppSettings.Settings["ClientID"].Value; authenticationContext = new AuthenticationContext(adfsUrl, false); authorizationRequestURL = authenticationContext.GetAuthorizationRequestURL(resourceUrl, clientID, redirectUri, UserIdentifier.AnyUser, null); Response.Redirect(authorizationRequestURL.AbsoluteUri);
После входа в AD FS я успешно получаю зашифрованный токен JWT, используя приведенный ниже код.
string clientID = config.AppSettings.Settings["ClientID"].Value.ToString(); Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext authenticationContext = new Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext( "https://pw12devadfs.pw12dev.company.com/adfs/oauth2/authorize", false); ClientCredential credential = new ClientCredential(clientID, "a8cb2a71-da38-4cf4-9023-7799d00e09f8"); AuthenticationResult result = authenticationContext.AcquireTokenByAuthorizationCode(Request.QueryString[0], new Uri("https://lxi322.lxi.company.com/CompanyLogin/SAML/AssertionConsumerService.aspx"), credential); var handler = new JwtSecurityTokenHandler(); var jsonToken = handler.ReadToken(result.AccessToken) as JwtSecurityToken;
Теперь я пытаюсь проверить тот же токен, используя приведенный ниже код
JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler(); System.IdentityModel.Tokens.SecurityToken securityToken = null; var validationParameters = new TokenValidationParameters() { ValidAudience = "https://lxi322.lxi.company.com", ValidIssuer = "http://PW12DEVADFS.PW12DEV.company.com", ValidateIssuer = false, ValidateAudience = false }; ClaimsPrincipal claims = tokenHandler.ValidateToken(Token, validationParameters, out securityToken);
Но при проверке токена я получаю ошибку как
IDX10500: Signature validation failed. Unable to resolve SecurityKeyIdentifier: 'SecurityKeyIdentifier ( IsReadOnly = False, Count = 1, Clause[0] = X509ThumbprintKeyIdentifierClause(Hash = 0xAE373EDE1C71AB1233A099B1891B3C59C3B825FE) ) token: '{"typ":"JWT","alg":"RS256","x5t":"rjc-3hxxqxIzoJmxiRs8WcO4Jf4"}.{"aud":"https://lxi322.lxi.company.com","iss":"http://PW12DEVADFS.PW12DEV.company.com/adfs/services/trust","iat":1485938952,"exp":1485942552,"upn":"lokesh@PW12DEV.company.com","email":"lokesh.zende@outlook.com","given_name":"lokesh","auth_time":"2017-02-01T08:49:11.955Z","authmethod":"urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport","ver":"1.0","appid":"a8cb2a71-da38-4cf4-9023-7799d00e09f8"}'.
Что я уже пробовал:
Я погуглил об ошибке. Каждый пост предлагает мне другое решение.
Глядя на исключение, это выглядит как какая-то проблема с сертификатом. Но я нигде не пользовался никаким сертификатом.