单点登录概念
单点登录的英文名叫做:Single Sign On(简称SSO),指在同一帐号平台下的多个应用系统中,用户只需登录一次,即可访问所有相互信任的系统。简而言之,多个系统,统一登陆(一次登录,处处通行)。
为什么需要做单点登录系统呢?在一些互联网公司中,公司旗下可能会有多个子系统,每个登陆实现统一管理,多个账户信息统一管理。比如阿里系的淘宝和天猫,显而易见这是两个系统,但是在使用过程中,只要你登录了淘宝,同时也意味着登录了天猫,如果每个子系统都需要登录认证,用户早就疯了,所以我们要解决的问题就是,用户只需要登录一次就可以访问所有相互信任的应用系统。
慕旋网络统一认证中心简介:
慕旋网络统一认证中心致力于构建一个统一的用户管理、身份分配和身份认证体系,以实现所有应用的单点登录。该中心的目标是实现用户身份和权限的动态同步,加强信息安全预警和审计,并提高系统的可用性、安全性和用户的便利性。
认证系统采用与WordPress相同的密码加密方式,并基于WordPress数据库表实现,因此能够很好地兼容WordPress框架。老用户也可以正常使用认证系统进行登录。未来,慕旋网络所有相关业务也将逐一接入同一统一认证中心,以实现对用户的统一管理。
目前,慕旋网络统一认证中心已经支持九种登录方式,包括两种普通登录方式(账号/邮箱密码登录、邮箱验证码登录)和七种第三方授权登录方式(PC端微信扫码登录、微信移动端授权登录、QQ授权登录、微博授权登录、抖音授权登录、gitee授权登录、github授权登录)。这些登录方式将为用户带来更加灵活、多元的选择。
同时,慕旋博客将下线原有的账号登录注册系统,改为慕旋统一认证中心登录,以帮助用户享受统一管理的便利。我们欢迎您提出宝贵意见,帮助我们改善和解决存在的问题,让慕旋网络统一认证中心更好地服务于用户。
常见问题
关于授权登录的安全性问题:授权登录主要用于获取用户在各平台的唯一识别openid以便于区分每个授权用户。授权操作将会获取用户在第三方平台对外公开的基本个人信息,不涉及手机号、性别等任何隐私信息。
关于token有效期的问题:慕旋网络统一认证中心所有登录方式token默认有效期为两个小时,如果用户主动勾选记住密码选项,token有效期将延长至两天,在token的有效期内,用户访问所有接入认证中心的系统均会自动登录,除非用户手动点击注销后,token将直接失效。
关于用户登录绑定的问题:当用户首次使用第三方授权登录时,需要绑定已有的账号或注册新的账号进行绑定。绑定成功后再次使用授权登录则会自动登录所绑定的账号;对于使用github账号授权登录,用户无需手动进行账号绑定,系统将自动获取用户的邮箱信息进行匹配和绑定,对于新用户,系统将自动进行注册并跳转登录,并会向用户的邮箱发送注册信息,请注意查收。
关于用户登录后不能正确跳转的问题:一般这种情况发生在第三方授权登录时,由于第三方平台技术受限,在某些浏览器或者浏览器无痕模式下可能会出现无法正常跳转的现象。在此建议用户在非无痕模式下使用授权登录。如果是跳转至了用户中心,也可以手动点击“免登录站点”模块中的可选站点以完成手动授权的操作,并将自动跳转至选中站点。
关于无法正常授权登录的问题:
1.由于官方技术限制,抖音授权登录在苹果手机Safari浏览器无痕模式下可能会出现“参数错误”的问题。建议关闭无痕模式,或者复制授权链接后在新的窗口粘贴打开。但需要注意,此操作可能导致登录后无法自动跳转至之前页面,需要用户手动返回。
2.由于国内服务器访问github受限,可能会导致授权失败。建议用户在保证网络状况良好的情况下多次进行尝试。若长时间仍未通过授权,建议更换授权方式。
慕旋网络统一认证中心实现原理
- 技术:系统后端采用Node+Koa+Ts,前端采用Vue2+Element UI,数据库存储采用MySql+Redis。单点登录采用JWT方式。
- 登录:用户登录统一认证中心后,系统会向每个子系统的localstorage中写入token,实现多个平台的一键登录。
- 跨域:
- 验证:用户进入子系统时,子系统首先检查是否存在token。若存在,则向子服务器发送身份验证请求,子服务器再向认证中心发送验证请求。经过身份验证后,用户会被自动登录到系统。
- 跳转:使用url参数拼接的方式实现登录后的跳转操作。为解决第三方登录回调后url参数丢失的问题,也会将回调参数存储在localstorage中,以确保用户在授权登录后能正常跳转回之前的页面。
- 安全:我们对所有接口进行了加签处理,以预防参数篡改和重放攻击。此外,登录接口需要进行严格的token校验,并在token中添加ip字段,以防止token被冒用,从而增强了系统的安全性。
- 注销:采用Redis黑名单的方式,将注销的用户token存入Redis中,并设置与token剩余过期时长相同的过期时间。任何存在于Redis中的token都被视为已注销的token,身份验证时不再通过,实现多个平台的统一注销。