Appearance
认证鉴权 ¶
TIP
基于功能服务中的登录鉴权starter
进行实现,同时将连带介绍一下登录鉴权
模块的详细使用方式。 其中认证和鉴权是两个概念,认证是用户登录成功后,用户信息会存储到Redis
中,而鉴权则是用户登录成功后,会根据用户角色权限进行权限的校验, 如果用户没有权限则无法进行访问,对应到安全上就是进行垂直方向的安全控制。鉴权相关的说明单独放到了请求权限管理模块中。
登录认证 ¶
扩展或修改登录方式 ¶
默认的账号密码登录实现 ¶
通过实现 UsernamePasswordAuthentication
接口并注入到Spring容器中即可,见IAM模块中的PasswordLoginHandler
实现, 是否验证码以及验证码有效时间具体在实现类自己进行手动实现。
第三方登录实现 ¶
通过实现 OpenIdAuthentication
接口并注入到Spring容器中即可,见IAM模块中的PhoneLoginHandler
和WeChatLoginHandler
等实现
其他登录实现 ¶
通过实现鉴权抽象接口AbstractAuthentication
进行编写
调用登录 ¶
TokenEndpoint
接收登录相关请求,通过分发到具体登录实现类进行登录,登录成功后保存Token
到Redis
中
访问鉴权 ¶
TIP
目前对请求接口进行控制的主要分为三类:第一种是无需登录就可以访问,第二种是登陆后可以访问,第三种是用户必须有相对应的权限才可以访问。请求后台接口时, 多种配置中任一方式认证通过后,就可以进行请求。
不需要登录可访问 ¶
通过在请求接口方法上标注@IgnoreAuth
注解并设置ignore
为true
,或着在配置文件中的bootx.starter.auth.ignoreUrls
项进行配置相关路径
登陆后可访问 ¶
通过在请求接口方法上标注@IgnoreAuth
注解并设置login
为true
,且ignore
为false
。
权限控制 ¶
主要分为两种:通过Web管理端配置角色与接口的关联关系,或是通过在请求方法上标注@PermCode
注解,系统会根据当前用户拥有角色所对应的权限码进行匹配, 如果配置有多个权限码,任一匹配通过即可访问。
权限码控制样例 ¶
java
@Tag(name ="角色菜单权限关系")
@RestController
@RequestMapping("/role/menu")
@RequiredArgsConstructor
public class RoleMenuController {
private final RolePermService rolePermService;
@PermCode("Admin")
@Operation(summary = "根据角色id获取关联权限id集合(包含资源和菜单)")
@GetMapping("/findPermissionIdsByRole")
public ResResult<List<Long>> findPermissionIdsByRole(Long roleId,String clientCode){
return Res.ok(rolePermService.findPermissionIdsByRole(roleId,clientCode));
}
}