我正在实现一个使用 OAuth2 针对 WSO2 进行身份验证的客户端,但在刷新访问令牌时遇到了严重的问题,获得 401 UNAUTHORIZED。虽然我已经发现了 Spring OAuth2 代码的作用,但我不知道为什么它的行为在 2.2.1.RELEASE 中发生了变化,对我来说这似乎是完全错误的。实际上使用 2.0.14.RELEASE 是有效的。
在我向你展示我做了什么以及我已经发现了什么之前,让我提出我的问题:
我应该如何使用客户端凭据而不是用户凭据来实现带有自动令牌刷新的 OAuth2 客户端?
所以这就是我到目前为止所实施的。客户端的配置OAuth2RestTemplate与ResourceOwnerPasswordResourceDetails用isClientOnly标志true,因为没有用户会话。可以成功建立客户端会话并设置访问令牌和刷新令牌。
@Bean
protected OAuth2ProtectedResourceDetails resource() {
ResourceOwnerPasswordResourceDetails resource = new ResourceOwnerPasswordResourceDetails() {
@Override
public boolean isClientOnly() {
return true;
}
};
List<String> scopes = new ArrayList<>(2);
scopes.add("write");
scopes.add("read");
resource.setScope(scopes);
resource.setGrantType("password");
resource.setAccessTokenUri(TOKEN_URL);
resource.setClientId(MY_CLIENT_ID);
resource.setClientSecret(MY_CLIENT_SECRET);
resource.setUsername(MY_SERVICE_USER);
resource.setPassword(MY_SERVICE_USER_PW);
return resource;
}
@Bean
public OAuth2RestOperations restTemplate() {
AccessTokenRequest atr = new DefaultAccessTokenRequest();
OAuth2RestTemplate template = new OAuth2RestTemplateWithBasicAuth(resource(), new …Run Code Online (Sandbox Code Playgroud)