我正在尝试执行对服务器的请求,该服务器向我提供了.p12文件,以便与其余服务建立安全连接,我正在执行以下操作,以使用密钥设置HttpClient:
SSLContext sslContext =SSLContextBuilder
.create().loadKeyMaterial(ResourceUtils.getFile("classpath:keystore/file.p12"), "secret".toCharArray(), "secret".toCharArray())
.build();
return HttpClientBuilder
.create()
.setConnectionManager(connManager())
.setSSLContext(sslContext)
.setDefaultRequestConfig(requestConfig())
.build();
Run Code Online (Sandbox Code Playgroud)
当我使用OAuth2RestOperations执行请求时,我得到了:
401 , Non existing certificate or invalid
Run Code Online (Sandbox Code Playgroud) 我已经在 java spring 框架中实现了 REST web 服务。我的应用程序需要获取访问令牌才能发出其他 URL 请求。我想缓存令牌,以便我可以重用它直到它过期。现在,我正在使用一个字段来存储令牌,但是还有另一种使用 spring-security 类的方法吗?
这就是我获取 accesToken 的方式:
@Bean
private OAuth2ProtectedResourceDetails oAuth2ProtectedResourceDetails() {
ClientCredentialsResourceDetails details = new
ClientCredentialsResourceDetails();
details.setClientId(clientId);
details.setClientSecret(clientSecret);
accessTokenUrl = BackEndUrl + "/oauth2/token";
details.setAccessTokenUri(accessTokenUrl);
return details;
}
@Bean
private OAuth2RestTemplate createRestTemplate(OAuth2ClientContext clientContext) {
return new OAuth2RestTemplate(oAuth2ProtectedResourceDetails(), clientContext);
}
@Override
public ResponseEntity<String> service() {
// Token recovery if no token has been created or if the token expiration time is exceeded
if (this.strToken == null || this.tokenLimitTime.isBeforeNow()) {
OAuth2ClientContext context = new DefaultOAuth2ClientContext(); …Run Code Online (Sandbox Code Playgroud) 我们一直在使用 Spring Oauth2 rest 模板并且运行良好。有人可以澄清一下处理过期不记名令牌的建议是什么。OAuth 2 规范规定,消费者应返回 401 并带有 error = invalid_token。
是否期望 Oauth2RestTemplate 检测到 invalid_token 响应,然后从身份验证服务器请求新令牌?或者知道令牌将要到期并事先请求新令牌是否应该是明智的?
有人可以推荐最佳做法吗?我认为它正确地做前者,但想知道做后者是否有任何价值。
spring-boot spring-security-oauth2 bearer-token oauth2resttemplate