™技术博客

框架 | 3.基于oauth的统一登录解决方案

2021年8月9日

需求场景


  • 用户使用每个网站前,需要重复注册,需要记住对应的账号和密码
  • 用户使用每个网站时,需要一次次重新登录
  • 用户只是了解一个个独立的网站,企业没有在用户心中形成统一的形象
  • 每个产品都需要重复设计、开发和维护注册、登录等模块
  • 用户的信息分散在各个网站中,不利于更好的了解用户

解决方案


1. 方案说明

本解决方案基于OAuth2 协议,为网站用户提供跨网站的流畅登录体验

  • 统一认证中心:基于 Spring Cloud Security、OAuth2 协议,提供统一认证能力,负责用户认证数据的统一管理
  • 需接入的网站:基于 SSO-SDK,轻量级接入统一认证体系,与统一认证中心协作,实现用户畅游各网站
  • 管理中心:负责管理需接入网站的认证管理,保证统一认证体系的安全与可控。
  • 关于用户的登录页,为保证用户的统一体验,推荐采用统一登录页的方案,同时支持少数网站需要自定义的特殊需求。

2. 方案优势

  • 遵循主流的OAuth2开放协议,除能打通内部系统的用户数据外,还可在授权允许情况下,允许外部系统使用本系统的用户进行登录,如常见微信登录、QQ登录等。
  • Spring Security 框架技术成熟且社区活跃,稳定性有保证
  • 在Spring Security 框架基础上,进行增强扩展,可满足密码模式下的sso场景
  • 支持跨域单点登录

3. 价值

基于此方案,打通各产品的用户体系,且实现多种场景下的免登。拥有统一账号体系,提升用户注册与登录场景体验。

  • 统一的用户认证体系,实现统一认证、跨网站免登,实现 SSO
  • 统一的用户数据库,实现用户数据的聚合
  • 统一登录页统一用户体验
  • 支持产品根据特殊性选择自定义登录页
  • 支持用户名、手机号、邮箱等多种认证方式的扩展

关于登录页的说明

1. 模式一:统一登录页的SSO

此种模式无需网站实现登录页、登录接口的开发,未登录状态的用户会自动被引导到统一认证中心去登录。

实现原理

技术实现整体使用spring-securiry-oauth2的 “授权码模式” 来进行实现。

2. 模式二:网站自定义登录页

实现原理

在统一认证中心与网站的实现上,除spring-securiry-oauth2之外,还需要引入自研的 “密码模式SSO” 扩展包来进行实现。

扫描二维码,分享此文章