Spring OAuth2 - 使用附加信息授权 URL

Posted

技术标签:

【中文标题】Spring OAuth2 - 使用附加信息授权 URL【英文标题】:Spring OAuth2 - Authorize URLs with Additional Information 【发布时间】:2018-09-20 00:29:47 【问题描述】:

如果我们设置了授权权限,Spring security 允许我们使用hasAnyAuthority()hasAnyRole()hasRole() 授权 URL。如果我创建了一个自定义令牌增强器,我可以在我的令牌中添加附加信息,有没有办法使用附加信息进行授权?

自定义令牌增强器:

public final class CustomTokenEnhancer implements TokenEnhancer 
    @Override
    public OAuth2AccessToken enhance(
            OAuth2AccessToken accessToken,
            OAuth2Authentication authentication) 
        Map<String, Object> additionalInfo = new HashMap<>();
        additionalInfo.put("company", "authorizeAPIsWithCompany");
        ((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo);
        return accessToken;
    

是否可以根据上述附加信息键、值授权 API?如果没有,我应该如何处理这个想法?

例如:

@Override
public void configure(HttpSecurity http) throws Exception 
     http
            .authorizeRequests()
  .antMatchers("/authorizedURL").hasCompany("authorizeAPIsWithCompany")
  .....


【问题讨论】:

【参考方案1】:

我认为您可以在不使用其他信息的情况下做您想做的事。 OAuth 协议不需要其他信息。它只是用于存储描述性信息。您应该能够通过客户的范围、权限和授权类型以及用户的权限(角色)来实现您想要的。您可以查看 Oauth2 规范 (https://www.rfc-editor.org/rfc/rfc6749) 了解更多信息。

你也可以有不同的安全策略,比如 MethodSecurityConfig:

@EnableGlobalMethodSecurity(prePostEnabled = true)
public static class MethodSecurityConfig extends GlobalMethodSecurityConfiguration 
    @Override
    protected MethodSecurityExpressionHandler createExpressionHandler() 
        return new OAuth2MethodSecurityExpressionHandler();
    


@PreAuthorize("hasRole('ADMIN') OR #oauth2.clientHasRole('AUTHORIZED-MERCHANT')")
@GetMapping(value = "authorized-url")
public ResponseEntity<List<Order>> getOrders() 
    return ResponseEntity.ok(orderService.getOrders());

【讨论】:

以上是关于Spring OAuth2 - 使用附加信息授权 URL的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security实现OAuth2.0授权服务 - 进阶版

如何在spring security oauth2授权服务器中通过jwt令牌获取用户信息?

Spring Security OAuth2 授权码模式

如何使用代码授权流在 Spring 应用程序中提取 Oauth2 访问令牌?

SpringCloud使用Spring Cloud OAuth2保护微服务系统

Spring OAuth2 - 客户端凭据授予类型中的用户信息