Spring Boot中基于​​角色的授权

Posted

技术标签:

【中文标题】Spring Boot中基于​​角色的授权【英文标题】:Role based authorization in spring boot 【发布时间】:2021-08-02 20:08:30 【问题描述】:

我是 Spring Boot 的新手。我需要在 Spring Boot 中实现基于角色的授权。我有不同的角色,多个用户将被映射到每个角色。我将设置不同的访问权限(读取、添加、删除、编辑) 每当调用 api 时,都需要检查访问权限并允许权限。 我打算使用拦截器来调用具有查询的方法以从数据库获取访问权限并拒绝或访问 api。 还有其他更好的方法吗?

【问题讨论】:

查看基于 LDAP 的身份验证:***.com/questions/61711828/… 要查看 Spring Security 的基础知识,请参阅下面的:***.com/questions/67329660/basics-of-spring-security 【参考方案1】:

授权也可以有以下两种方式:

    OAuth(参考 - https://medium.com/@bvulaj/mapping-your-users-and-roles-with-spring-boot-oauth2-a7ac3bbe8e7f) Spring Security 角色和权限(参考-https://www.baeldung.com/role-and-privilege-for-spring-security-registration)

【讨论】:

您好,感谢您的回复,我查看了这些链接,这些与身份验证有关。我将使用 Okta 进行身份验证。我要实施授权【参考方案2】:

如果您使用的是 Spring Security,您可以使用方法安全注释来处理它,例如 @PreAuthorize@PostAuthorize .. 甚至可以将它们组合成新的注释。

首先您的用户需要实现 UserDetails 然后您应该根据您的角色和权限结构实现 getAuthorities() 方法 Spring Security 基本上检查 getAuthority() 方法返回的内容,如果返回值以 "ROLE_" 为前缀,例如 "ROLE_ADMIN" 它将是如果它没有以“ROLE_”为前缀,则作为ROLE处理,它将作为授权处理 您可以使用方法注释来检查权限和角色,如下例所示:

@PreAuthorize("hasRole('ROLE_ADMIN') and hasAuthority("READ")") 

Spring Security 将通过您的用户的getAuthorities() 实现检查您授予的权限,然后,根据您的注释它将由 Spring Security 代表您自动检查。

为清楚起见,您可以检查 https://www.baeldung.com/spring-security-granted-authority-vs-role

为了快速实施,您可以查看下面的文章(我不会直接使用它,但您可以理解这个想法。您也可以使用权限,但简单的解决方案可能是下面的解决方案。):

https://www.baeldung.com/role-and-privilege-for-spring-security-registration

【讨论】:

谢谢,我将使用 Okta 进行身份验证,我可以尝试使用 Okta 身份验证的上述方法吗? 没问题:)。我从未与 okta 集成,但看起来 okta 提供了开箱即用的 RBAC,<artifactId>okta-spring-boot-starter</artifactId> 有非常全面的文章。你能检查这个链接developer.okta.com/blog/2019/06/20/spring-preauthorize【参考方案3】:

您可以创建自定义注释来处理每个角色的请求。我可以阅读这个article,了解有关如何实施的更多详细信息。

并且在 api 中会有格式:

@GetMapping(...)
@YouCustomAnnotation("roleName")
public void doSomeThing()

如果用户的角色与注解中定义的角色匹配,则会调用此api,如果用户的角色不匹配,服务器将返回404代码。

【讨论】:

以上是关于Spring Boot中基于​​角色的授权的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot JWT token 基于角色的授权问题

基于 Spring Boot / Spring Security 角色的授权无法正常工作 [重复]

218.Spring Boot+Spring Security:基于内存数据库的身份认证和角色授权

219.Spring Boot+Spring Security:基于MySQL数据库的身份认证和角色授权

Spring Boot Security

Java快速开发平台,基于(Spring Boot、Spring MVC、Apache Shiro、MyBatis、Beetl、Bootstrap、AdminLTE),在线代码生成,包括组织、角色用户