OAuth2(Okta):如何设置授权

时间:2018-10-19 21:13:02

标签: authorization spring-security-oauth2 okta

我正在使用Okta使用Oauth2编写应用程序,但遇到了问题:

我想做的是让Okta(或其他方法)自动设置并提供用户的授权详细信息。我已经有Okta能够支持用户的身份验证,我正在特别寻求有关授权的帮助。特别是,我想做的是将API的授权分为3个部分:

1)一组可供所有用户使用的API,甚至包括未经身份验证的用户。

2)一组仅对经过身份验证的用户可用的API。

3)一组API,这些API被锁定在基于权限的(授权)要求下。

这是我遇到的第三个小组。我的安全上下文设置如下:

@Configuration
@EnableOAuth2Sso
public class SecurityConfig extends OAuth2SsoDefaultConfiguration {

    public SecurityConfig(ApplicationContext applicationContext) {
        super(applicationContext);
    }

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/anyaccess/**").permitAll()
                .antMatchers("/credential/**").hasRole("ADMIN");
        super.configure(http);
        http.logout().logoutSuccessUrl("/");
    }
}

因此/ anyaccess可以被任何人访问,除/ credential之外的任何其他东西都可以由任何经过身份验证的用户访问。

当我通过Okta登录到我的应用程序时,我得到了一个Authentication and Principal对象,该对象似乎是在某个地方自动生成的(某种程度上,这是某个地方,我主要是在寻求澄清)。但是,这些对象没有任何设置的权限,它们似乎也没有提供为将来的请求添加其他权限的方法。我该怎么办

1)设置这些身份验证和主体对象以包含每个用户我想要的权限吗?

2)确保这些是在通过Okta用户登录时自动设置的,并且不需要额外的API调用吗?

3)坚持对此配置进行更改,并将其作为我的应用程序授权服务的一部分吗?

4)有什么方法可以通过Okta配置管理此操作,或者我需要设置一个单独的服务来管理此操作并将其附加到我的Okta身份验证服务上?

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以将用户的组添加到“组”声明中,Okta Spring Boot启动程序将自动将这些组转换为Spring Security授权。

从顶部菜单转到 API ,然后单击授权服务器

点击默认授权服务器。

点击索赔标签。

点击添加声明按钮。

更新弹出表单以匹配下面的图像。

请注意,过滤器正则表达式为。*。

enter image description here

然后,您可以在方法中使用@PreAuthorize("role_name")

This blog post有更多信息。