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