为了解决公司多应用需要单点登录,统一认证的场景,我负责开发了统一认证服务。遵循了OAuth2协议,工程采用java语言编写,框架采用springboot,spring security,spring cloud OAuth2,spring data jpa等,数据使用postgresql做持久化存储,使用docker 打包部署,对外暴露restful风格的http接口。主要功能为管理用户基本信息,用户角色,用户权限等;生成token,认证token;对外提供认证,鉴权服务。
公司使用了一些支持OAuth2的开源应用,gitlab、seafile等,在对接gitlab的OAuth2时碰到了一些问题,预期统一认证后直接进入gitlab仓库内容界面,但是因为gitlab会对登录界面中隐藏的密钥进行检查,无法直接略过登录页,后通过在后台抓取gitlab登录页面中的密钥,模拟oauth登录按钮的请求,拿到带有正确state的oauth跳转地址,成功实现统一认证后,跳过gitlab登录页,直接进入仓库界面的需求。