OAuth 2.0访问令牌和客户端证书

时间:2020-10-09 10:59:50

标签: java spring-boot certificate httprequest token

因此,我目前正在开发一个Spring Boot MS,该MS需要连接到已实现OAuth 2.0的外部API。

API商店使用授予类型的自定义版本,称为客户证书

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

它需要两个身份因素:

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

获取此令牌的curl命令为:

// Validate mandatory "Order notes" field for "Parcel pickup point" shipping methods add_action( 'woocommerce_checkout_process', 'flat_rate_order_comment_validation', 20 ); function flat_rate_order_comment_validation() { $chosen_shipping = WC()->session->get( 'chosen_shipping_methods' )[0]; $chosen_shipping = explode(':', $chosen_shipping); if ( $chosen_shipping[0] == 'flat_rate:47' && empty($_POST['order_comments']) ){ wc_add_notice( __( "You need to fill up \"Order notes\" with some details.", "woocommerce" ), 'error' ); } }

如何将其转换为Spring引导应用程序?

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

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

欢迎任何帮助。谢谢:)

1 个答案:

答案 0 :(得分: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);

...
相关问题