Как получить значение «x5t», используя учетные данные сертификата для аутентификации приложения - PullRequest
0 голосов
/ 02 июня 2018

Я пытался получить токен JWT из Microsoft Azure Active Directory, используя Учетные данные сертификата для аутентификации приложения .

Я поражен выяснением значения "x5t".

Я пытался использовать

  • значение отпечатка пальца SHA-1, доступное в общедоступном сертификате.
  • SHA-1 хэш общедоступного сертификата с использованием FVIC.

Но я продолжаю получать ошибку ниже, когда отправляю запрос к конечной точке входа MSA

{
    "error": "invalid_client",
    "error_description": "AADSTS70002: Error validating credentials. AADSTS50012: Client assertion contains an invalid signature. [Reason - The key was not found., Thumbprint of key used by client: '6F67F76B96F6FBBDF9D3EE1DDF7F9A7B877EE9C75DEDBD3DE9C7FB', Configured keys: [Key0:Start=06/01/2018, End=12/31/2099, Thumbprint=6WGktXA64QmA9TPv;Key1:Start=06/01/2018, End=12/31/2099, Thumbprint=rD9Q10sR6Q6ZkDVw;]]\r\nTrace ID: d9e3e276-e878-4b8a-b08b-10c82a0b0600\r\nCorrelation ID: 48ec889d-2376-45a6-9bf0-01b22b0e0c17\r\nTimestamp: 2018-06-01 09:38:24Z",
    "error_codes": [
        70002,
        50012
    ],
    "timestamp": "2018-06-01 09:38:24Z",
    "trace_id": "d9e3e276-e878-4b8a-b08b-10c82a0b0600",
    "correlation_id": "48ec889d-2376-45a6-9bf0-01b22b0e0c17"
}

Как получить значение для "x5t"?

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Я нашел этот сайт и этот один неоценимым для решения проблемы x5t.Самый простой способ сделать это - вручную получить отпечаток пальца:

echo $(openssl x509 -in your.cert.pem -fingerprint -noout) | sed 's/SHA1 Fingerprint=//g' | sed 's/://g' | xxd -r -ps | base64

значение из приведенной выше команды - это значение, которое вы вводите в поле x5t в JWT.До этого я получал недопустимую ошибку отпечатка пальца от Azure.

Если вы используете Ruby, вы можете следовать этому ответу , чтобы получить:

p12 = OpenSSL::PKCS12.new(File.read(CERT_FILE), '')
x509_sha1_thumbprint = Base64.encode64(OpenSSL::Digest::SHA1.new(p12.certificate.to_der).to_s.upcase.scan(/../).map(&:hex).pack("c*")).strip
jwt_token = JWT.encode payload, p12.key, 'RS256', { typ: 'JWT', x5t: x509_sha1_thumbprint }
0 голосов
/ 03 июня 2018

x5t должен быть отпечатком SHA-1 сертификата X509 в кодировке base64url:

4.1.7.Параметр заголовка «x5t» (отпечаток SHA-1 сертификата X.509)

Параметр заголовка «x5t» (отпечаток SHA-1 сертификата X.509) является отпечатком SHA-1 в кодировке base64url (он же дайджест) кодировки DER сертификата X.509 [RFC5280], соответствующего ключу, используемому для цифровой подписи JWS.Обратите внимание, что отпечатки сертификатов также иногда называют отпечатками сертификатов.Использование этого параметра заголовка НЕОБЯЗАТЕЛЬНО.

Источник: RFC7515 - https://tools.ietf.org/html/rfc7515#section-4.1.7

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...