 |
|
coder1v5
V2EX member #505509, joined on 2020-08-26 19:10:19 +08:00
|
告别古法,拥抱AI!
coder1v5's recent replies
要不先试试写个登录呢,学会可以打败 90%的后端程序员。路线如下:
第 1 阶段:手写用户名密码登录
第 2 阶段:补齐密码安全、Session 、找回密码、登出
第 3 阶段:加入验证码、限流、锁定、MFA
第 4 阶段:做 JWT / Refresh Token / 设备会话
第 5 阶段:做 RBAC 、菜单权限、接口权限、方法权限
第 6 阶段:系统掌握 Spring Security 的抽象
第 7 阶段:学 OAuth2 / OIDC / SAML ,接入 Keycloak 或 Okta
第 8 阶段:把复杂授权外置到 OPA ,进入 Policy as Code
真正的进阶是你的思维方式在变:
初级:会写登录接口
中级:会设计登录态和权限模型
高级:会把认证、授权、风控、审计拆成独立能力
架构级:会把身份中心、应用安全、策略引擎分层治理
jwt 中将用户关键信息 userid, userType 加入进去,写一个 jwtProvider,在 jwtProvider 中解析出来 token,token 本身抽象出来也是认证信息(用户名和密码),这个 Provider 当做登录认证 Provider 去写。Filter 做配置转发给 Provider 。然后根据 token 中解析出来的 userId,userType, 调用不同的 service 去获取对应的权限.然后放入 SecurityContext 中就可以了
if(Strings.equals(userType,后台用户){
//调用后台用户的服务类,添加用户信息,权限信息,放入 security 上下文中
SecurityContextHolder.getContext().setAuthentication(authToken);
}else{
//调用前台用户的服务类,添加用户信息,权限信息,放入 security 上下文中
SecurityContextHolder.getContext().setAuthentication(authToken);
}
spring security 对于这种场景提供了足够的支持,别说两种用户类型了,多少种登录用户,及多种认证方式都可以轻松扩展。