我正在使用Oka编写一个使用Oauth2的应用程序,我遇到了一个问题:
我想做的是让Okta(或其他方法)自动设置并提供我的用户的 authorization 详细信息 . 我已经让Okta能够支持 authentication 的用户,我特意寻找有关 authorization 的帮助 . 特别是,我想要做的是将我的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身份验证服务中?
谢谢 .
1 回答
您可以将用户组添加到“组”声明中,Okta Spring Boot启动程序会自动将这些组转换为Spring Security权限 .
从顶部菜单中,转到 API 并单击 Authorization Servers .
单击 default 授权服务器 .
单击 Claims 选项卡 .
单击 Add Claim 按钮 .
更新弹出窗体以匹配下面的图像 .
请注意,Filter Regex是 . * .
然后你可以在你的方法上使用
@PreAuthorize("role_name")
.This blog post有更多信息 .