我正在实现一个与GitLab集成作为身份提供程序的小工具。React在前端,Quarkus在后端。
我已经将我的后端配置为web_app
,并且这部分正在工作。进入localhost:8080/auth
(后端)后,Quarkus将我重定向到GitLab,登录后,我被重定向回后端,返回UserInfo
作为JSON。
现在我想添加基于会话(cookie)的前端部分。根据文档,我设置了quarkus.oidc.authentication.java-script-auto-redirect=false
,我的前端接收499代码,然后使用window.location.assign
浏览器打开后端->GitLab→登录→UserInfo
作为JSON。最后,流在后端停止,我无法回到前端。
- 我的流程正确吗?甚至有可能实现这一点(后端OIDC和前端会话)吗?
- 我如何包装
window.location.assign("http://localhost:8080/auth")
保持前端上下文(我需要使用这个,否则重定向到GitLab将失败与CORS)?
经过一些研究,尝试和失败,准备实施。
:
- 前端显示GitLab登录按钮
- 按钮是一个链接到后台与额外的HTTP头
'X-Requested-With': 'JavaScript'
- 如果用户没有被认证,后端返回499代码,前端使用
window.location.assign
重定向到GitLab登录页面 GitLab重定向到后端(令牌存储在那里) - 后端重定向到前端(此时后端有用户的令牌,前端有来自后端会话的cookie)
前端和后端都在同一个域中工作。
实现- https://gitlab.com/hakkie-it/time-tracker/time-tracker