作为资源所有者,我可以使用受保护资源服务器(此处:服务)获取响应>资源所有者密码凭据通过password
授予类型(又名org.springframework.security.oauth2.client.OAuth2RestTemplate
)。
Resource Owner
(e.g. a Users with a browser)
+ ^
(1)| |(6)
| |
| | (2)
v | credentials
+-+---+--+ +--------+
| +---------> |
| Client | | OAuth2 |
| <---------+ Server |
+-+---^--+ (3) | |
| | token +--------+
(4)| |(5)
| |
+-v---+---+
| |
| Service |
| |
+---------+
但是,即使没有用户登录,此受保护资源服务器也提供了我想要访问的公共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
当然,我可以非常使用常规 frameguard: {
action: 'allow-from',
domain: 'https://calendar.google.com/calendar/'
}
来访问公共API,但这是通常的做法吗?
答案 0 :(得分:0)
我们决定采用另一种方法。无论如何,你可以为一个匿名的&#34;创建一个JWT。 disabling the anonymous Spring Security Session会议。
@Override
protected void configure(HttpSecurity http) throws Exception {
http.anonymous().disable();
}
然后,auth
不再是AnonymousAuthenticationToken
的实例,而是null
。