OAuth 2.0 访问令牌和客户端证书
OAuth 2.0 Access Tokens and Client Certificate
所以我目前正在开发一个 Spring 引导 MS,它需要连接到一个外部 API,它已经实现了 OAuth 2.0。
API 商店使用自定义版本的授权类型,称为 客户端证书。
此授权类型结合使用相互 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 启动应用程序?
我目前已经编写了这段代码,但我认为我还差得远。
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);
}
欢迎任何帮助。谢谢:)
我想你离得不远了
你肯定需要包括正文:
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);
...
所以我目前正在开发一个 Spring 引导 MS,它需要连接到一个外部 API,它已经实现了 OAuth 2.0。
API 商店使用自定义版本的授权类型,称为 客户端证书。
此授权类型结合使用相互 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 启动应用程序?
我目前已经编写了这段代码,但我认为我还差得远。
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);
}
欢迎任何帮助。谢谢:)
我想你离得不远了
你肯定需要包括正文:
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);
...