Public API 使用 OAuth 2.0 访问
Public API access with OAuth 2.0
作为资源所有者,我能够从受保护的资源服务器获得响应(此处:服务) 通过org.springframework.security.oauth2.client.OAuth2RestTemplate
.
使用资源所有者密码凭证 授权类型(又名password
)
Resource Owner
(e.g. a Users with a browser)
+ ^
(1)| |(6)
| |
| | (2)
v | credentials
+-+---+--+ +--------+
| +---------> |
| Client | | OAuth2 |
| <---------+ Server |
+-+---^--+ (3) | |
| | token +--------+
(4)| |(5)
| |
+-v---+---+
| |
| Service |
| |
+---------+
但是,此 Protected Resource Server 还提供了我想要访问的 public API,即使没有用户登录。我认为这是一个常见的用例,但 OAuth2RestTemplate
似乎没有提供,因为 AccessTokenProvicerChain
检查 AnonymousAuthenticationToken
:
if (auth instanceof AnonymousAuthenticationToken) {
if (!resource.isClientOnly()) {
throw new InsufficientAuthenticationException(
"Authentication is required to obtain an access token (anonymous not allowed)");
}
}
当然,我可以例外地使用常规 RestTemplate
访问 public API,但这是通常的做法吗?
我们决定采用另一种方法。无论如何,您 可以 通过 disabling the anonymous Spring Security Session 为 "anonymous" 会话创建 JWT。
@Override
protected void configure(HttpSecurity http) throws Exception {
http.anonymous().disable();
}
那么,auth
不再是AnonymousAuthenticationToken
的实例,而是null
。
作为资源所有者,我能够从受保护的资源服务器获得响应(此处:服务) 通过org.springframework.security.oauth2.client.OAuth2RestTemplate
.
password
)
Resource Owner
(e.g. a Users with a browser)
+ ^
(1)| |(6)
| |
| | (2)
v | credentials
+-+---+--+ +--------+
| +---------> |
| Client | | OAuth2 |
| <---------+ Server |
+-+---^--+ (3) | |
| | token +--------+
(4)| |(5)
| |
+-v---+---+
| |
| Service |
| |
+---------+
但是,此 Protected Resource Server 还提供了我想要访问的 public API,即使没有用户登录。我认为这是一个常见的用例,但 OAuth2RestTemplate
似乎没有提供,因为 AccessTokenProvicerChain
检查 AnonymousAuthenticationToken
:
if (auth instanceof AnonymousAuthenticationToken) {
if (!resource.isClientOnly()) {
throw new InsufficientAuthenticationException(
"Authentication is required to obtain an access token (anonymous not allowed)");
}
}
当然,我可以例外地使用常规 RestTemplate
访问 public API,但这是通常的做法吗?
我们决定采用另一种方法。无论如何,您 可以 通过 disabling the anonymous Spring Security Session 为 "anonymous" 会话创建 JWT。
@Override
protected void configure(HttpSecurity http) throws Exception {
http.anonymous().disable();
}
那么,auth
不再是AnonymousAuthenticationToken
的实例,而是null
。