我正在使用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身份验证服务上?
谢谢。
答案 0 :(得分:1)
您可以将用户的组添加到“组”声明中,Okta Spring Boot启动程序将自动将这些组转换为Spring Security授权。
从顶部菜单转到 API ,然后单击授权服务器。
点击默认授权服务器。
点击索赔标签。
点击添加声明按钮。
更新弹出表单以匹配下面的图像。
请注意,过滤器正则表达式为。*。
然后,您可以在方法中使用@PreAuthorize("role_name")
。
This blog post有更多信息。