【问题标题】:OAuth 2.0 Access Tokens and Client CertificateOAuth 2.0 访问令牌和客户端证书
【发布时间】:2021-01-24 10:57:04
【问题描述】:

所以我目前正在开发一个 Spring Boot MS,它需要连接到实现了 OAuth 2.0 的外部 API。

API Store 使用称为客户端证书的授权类型的自定义版本。

此授权类型使用相互 SSL 和应用程序级别凭据的组合。

它需要两个身份因素:

  • 身份因素 1 - 相互 SSL:由我创建的证书,由 API 商店所有者签名
  • 身份因素 2 - 应用程序级别凭据:{consumerKey:consumerSecret}

获取这个token的curl命令是:

curl -k -d "grant_type=client_cert" --basic -u "{consumer key}:{consumer secret}" -H "Content-Type: application/x-www-form-urlencoded" --cert {Certificate Pem} https://api.examplestore.com/token

如何将其转换为我的 Spring Boot 应用程序?

我目前已经编写了这段代码,但我认为我还差得很远。

public void TokenRequest() {
    ResponseEntity<String> response = null;
    RestTemplate restTemplate = new RestTemplate();

    String credentials = String.format("%s:%s", consumerKey, consumerSecret);
    String encodedCredentials = new String(Base64.getEncoder().encodeToString(credentials.getBytes()));


    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

    //headers.setCertificate??

    headers.add("Authorization", "Basic " + encodedCredentials);

    HttpEntity<String> request = new HttpEntity<String>(headers);

    response = restTemplate.exchange(tokenUrl, HttpMethod.POST, request, String.class);

}

欢迎任何帮助。谢谢你:)

【问题讨论】:

    标签: java spring-boot certificate httprequest token


    【解决方案1】:

    我觉得你离得不远了。

    你肯定需要包含正文:

    HttpEntity<String> request = new HttpEntity<String>("grant_type=client_cert", headers);
    

    您还需要包含证书,可能是这样的:

    SSLContext sslContext = SSLContextBuilder.create()
        .loadTrustMaterial(new URL("/path/to/your/cert"), "certpassword".toCharArray())    
        .setProtocol("yourProtocol")
        .build();
     
    final HttpClient httpClient = HttpClientBuilder.create()
            .setSSLContext(sslContext)
            .build();
    
        final ClientHttpRequestFactory requestFactory =
            new HttpComponentsClientHttpRequestFactory(httpClient);
    
    RestTemplate restTemplate = new RestTemplate(requestFactory);
    
    ...
    

    【讨论】:

    • 这很有帮助,但我仍然想知道,我不需要一种方法来插入我的私钥文件吗?
    • 好的,我知道了。我需要先将我的密钥和证书都转换为 p12 格式,然后再转换为 .PEM。像这样openssl pkcs12 -export -out abc_test.p12 -inkey abc_test.key -in abc_test.cer -name "abctest" -passout pass:yourpass 然后openssl pkcs12 -in abc_test.p12 -out abc_test.pem -nodes
    猜你喜欢
    • 2019-08-08
    • 2015-04-01
    • 2017-04-30
    • 2021-03-12
    • 2021-09-12
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    相关资源
    最近更新 更多