使用OAuth 2.0进行公共API访问

时间:2018-04-16 12:13:34

标签: java spring-security oauth-2.0 spring-oauth2

作为资源所有者,我可以使用受保护资源服务器(此处:服务)获取响应>资源所有者密码凭据通过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,但这是通常的做法吗?

1 个答案:

答案 0 :(得分:0)

我们决定采用另一种方法。无论如何,你可以为一个匿名的&#34;创建一个JWT。 disabling the anonymous Spring Security Session会议。

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.anonymous().disable();
}

然后,auth不再是AnonymousAuthenticationToken的实例,而是null