【问题标题】:OAuth2 (Okta): How to set authorizationOAuth2 (Okta):如何设置授权
【发布时间】:2019-03-24 19:05:57
【问题描述】:

我正在使用 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 身份验证服务中?

谢谢。

【问题讨论】:

    标签: authorization spring-security-oauth2 okta


    【解决方案1】:

    您可以将用户组添加到“组”声明中,Okta Spring Boot 启动器会自动将它们转换为 Spring Security 权限。

    从顶部菜单中,转到 API 并点击 Authorization Servers

    点击默认授权服务器。

    点击声明标签。

    点击添加声明按钮。

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

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

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

    This blog post 有更多信息。

    【讨论】:

    • 那篇博文非常有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    相关资源
    最近更新 更多