从Azure AD读取ROLES到Spring Boot OAuth2

时间:2018-10-03 20:25:09

标签: java azure spring-boot

我有一个使用Spring Boot Oauth2的ResourceServer,其中我的控制器具有以下内容:

@RestController
public class Controller {

    @PreAuthorize("hasRole('search_price')")
    @GetMapping
    public String test() {
        return "OK !!";
    }
}

因此,我有一个由Azure AD生成的令牌,该令牌在您的索赔中具有此角色,例如波纹管:

...
"idp": "https://sts.windows.net/xxxxxxx/",
  "oid": "e224xxxxxxxx6faf",
  "roles": [
    "search_price"
  ],
  "sub": "e2240xxxxxxx",
  "tid": "a753xxxxxxxxxx177e575",
...

当我尝试从POSTMAN命中此端点时,我得到:访问被拒绝。如果我删除“ @PreAuthorize”注释,则一切正常,但是我需要它。

在方法 extractAuthentication 中的 DefaultAccessTokenConverter 类中,我发现了以下内容:

Collection<? extends GrantedAuthority> authorities = null;
        if (user == null && map.containsKey("authorities")) {
            String[] roles = (String[])((Collection)map.get("authorities")).toArray(new String[0]);
            authorities = AuthorityUtils.createAuthorityList(roles);
        }

因此,默认情况下,转换器不会读取 ROLES 声明,只是权威和Azure AD都没有这最后一个。

0 个答案:

没有答案