我试图使用Certificate credentials for application authentication从Microsoft Azure Active Directory获取JWT token 。

我为弄清楚“x5t”的值(value)而感到震惊。

我尝试过

  • SHA-1指纹值可在公共(public)证书中使用。
  • 使用FVIC的公共(public)证书的
  • SHA-1哈希。

  • 但是将请求发送到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”的值?

    最佳答案

    我发现此site和此one对于解决x5t问题非常有用。最简单的方法是手动获取指纹:

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

    上面命令的值是您在JWT的x5t字段中输入的值。在此之前,我从天青得到无效的指纹错误。

    如果您使用的是Ruby,则可以按照以下answer获取:
    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 }
    

    关于azure - 如何使用证书凭据进行应用程序身份验证来获取 "x5t"的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50657463/

    10-10 03:16