-
Notifications
You must be signed in to change notification settings - Fork 50
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: 兼容原登录系统的基础上,接入 Maa Account #138
base: dev
Are you sure you want to change the base?
feat: 兼容原登录系统的基础上,接入 Maa Account #138
Conversation
目前使用邮箱作为标识符,目前的Maa Account不能修改邮箱,因此工作正常。如果日后 Maa Account 新增修改邮箱功能,那么就需要使用 OpenID 作为唯一标识符,否则会出现账户丢失的异常情况。 |
新的登录流程去除了对 Session 的依赖,主要修改: ① “访问后端的 /oidc/authorization/maa-account 页面 -> 触发重定向到 Maa Account 登录页面 ” 修改为: {
"status_code": 200,
"data": {
"serial": "string",
"redirect_url": "string"
}
} 前端需要临时存储流水号待后续使用,并跳转到 redirect_url。 ② “作业站前端获取 URL 参数,并原封不动通过 GET 请求发送给后端的 /oidc/callback/maa-account 接口” 修改为: |
后端部署的时候可以让网关限制一下 /oidc/authorization 下所有路径的 qps,毕竟这个接口会往 Redis 里面写数据,写多了怕出问题。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
我没接触过登陆认证的流程,看看有没有其他佬review,没有的话我就测试一下,没问题的话就直接合并了。
src/main/java/plus/maa/backend/config/security/OIDCAuthenticationSuccessHandler.java
Show resolved
Hide resolved
代码逻辑没有看出问题,业务逻辑个人认为有待进一步讨论 |
目前的业务逻辑你认为存在哪些问题?有什么改进的方向吗? |
@LiamSho 佬,可以给下流程上的建议吗? |
改了一下 RedisCache ,现在 oidc 过程中的中间信息会使用 Jackson 序列化储存在 Redis,可读性更好,并且体积比 Java 序列化器更小。 |
…a_account # Conflicts: # src/main/java/plus/maa/backend/repository/RedisCache.java
#111
使用了兼容原有登录系统的方法,目前流程如下:
用户点击登录按钮 -> 访问后端的 /oidc/authorization/maa-account 页面 -> 触发重定向到 Maa Account 登录页面 -> 登录成功携带 Token 返回作业站前端的 /oidc/callback/maa-account 页面 -> 作业站前端获取 URL 参数,并原封不动通过 GET 请求发送给后端的 /oidc/callback/maa-account 接口 -> 后端通过 Token 从 OIDC 服务器获取用户信息 -> 与作业站数据库用户进行邮箱比对,若用户不存在,则通过使用 OIDC 获取的用户信息创建一个用户 -> 后端调用现有的 JWT 认证登录模块,登录通过 OIDC 获取到的邮箱 -> 后端返回登录信息,返回的信息格式与 /user/login 接口完全一致,后续的使用方法也完全一致。
前端适配时需要记得允许 ajax 调用 /oidc/callback/maa-account 接口时的 GET 请求携带cookie、session,以 axios 为例的话就是让本次请求临时启用 withCredentials: true,因为 Spring Security 请求 OIDC 时默认会缓存一些信息到 Session 中,回调时从 Session 中取出数据进行比对。