OAuth2 (Okta):如何设置授权

OAuth2 (Okta): How to set authorization

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

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

1) 一组 API 可供任何用户使用,甚至是未经身份验证的用户。

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

3) 一组 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 和 Principal 对象,它们似乎是在某处以某种方式自动生成的(这是我主要在某处以某种方式寻找澄清的地方)。但是,这些对象没有任何设置的权限,它们似乎也没有提供为将来的请求添加额外权限的方法。我怎样才能:

1) 设置这些 Authentication 和 Principal 对象以包含我想要的每个用户的权限?

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

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

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

谢谢。

您可以将用户组添加到 "groups" 声明中,Okta Spring 引导启动程序会自动将它们转换为 Spring 安全权限。

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

点击默认授权服务器。

单击声明 选项卡。

单击添加声明按钮。

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

请注意过滤器正则表达式是 .*.

然后你可以在你的方法上使用@PreAuthorize("role_name")

This blog post 有更多信息。