美文网首页
跨域单点登陆的一种实现

跨域单点登陆的一种实现

作者: 淡看江湖等雨 | 来源:发表于2018-05-09 15:51 被阅读99次

单点登陆需求在现代企业系统中是非常常见的一个需求,无论是ToC的系统,还是ToB的系统。

  单点登陆(SSO,Single Sign On)的概念比较简单,就是多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

登陆

如果上图所示,有一个用户,三个应用系统,还有一个登陆系统(登陆模块)。如何在上述系统中间实现一个单点登陆呢?

首先假设只有用户和一个系统,我们怎么实现登陆呢?当用户第一次访问应用系统的时候,因为还没有登录,会被引导到登录页进行登录;根据用户提供的登录信息,系统进行身份校验(用户识别号+识别码(密码/验证码)),如果通过校验,应该返回给用户一个认证的凭据--ticket,同时应用系统会把这个ticket存储到自己的存储中(内存/redis/数据库);用户在客户端将这个ticket存储在客户端,如cookie,sessionStorage等。当用户再访问系统的时候将这个ticket带上(通过cookie或URL或request header等),作为自己认证的凭据,应用系统接受到请求之后会对这个ticket进行校验。如果通过校验,用户就可以继续访问应用系统了。

多个系统的时候真的要实现的时候也不是很复杂。当用户第一次访问应用系统A的时候,因为还没有登录,会被引导到登陆系统中进行登录;根据用户提供的登录信息,登陆系统进行身份校验,如果通过校验,应该返回给用户一个认证的凭据--ticket;用户再访问别的应用的时候就会将这个ticket带上,作为自己认证的凭据,应用系统接受到请求之后会把ticket送到登陆系统进行校验,检查ticket的合法性。如果通过校验,用户就可以在不用再次登录的情况下访问应用系统B和应用系统C了。

如果是web系统,这里还会有一个跨域的问题,登陆系统给用户的ticket只会存储在登陆系统的域里面,而应用系统A和登陆系统的域不是一个。所以当从登陆系统登陆以后再访问应用系统的时候需要做一次转换。这个时候登陆系统会要求应用系统提供自己redirectUrl,当用户在登陆成功以后,会跳转到这个redirectUrl,同时在这个URL上面添加ticket参数。

实际使用当中,登陆系统会要求应用系统给出更多的字段,以此来验证彼此的安全性。例如会又一个AppId和AppSecret。

相关文章

  • 基于PHP编程语言的SSO实例

    SSO有三种模式:①跨子域单点登陆②完全跨单点域登陆③站群共享身份认证 第一种模式很简单,只需要将Cookie的域...

  • 跨域单点登陆的一种实现

    单点登陆需求在现代企业系统中是非常常见的一个需求,无论是ToC的系统,还是ToB的系统。 单点登陆(SSO,Si...

  • 单点登陆---session跨域

    通过 ini_set("session.cookie_domain",'test.com');session_st...

  • 跨域单点登录解决方案

    单点登录有两种模型,一种是共同父域下的单点登录(例如域名都是 xx.a.com),还有就是完全跨域下的单点登录(例...

  • Oauth2.0实现跨主域单点登录方案

    1、说明 此案例基于Oauth2.0+Spring 实现跨域单点登录; 系统说明: auth.com -- 认证中...

  • CORS实现跨域SSO单点登录

    前一段时间看过CAS实现跨域单点登录SSO的方案,觉得比较复杂,想到如果有了CORS是不是可以直接使用跨域ajax...

  • #hello,JS:15 同源策略 & 跨域(JSONP)

    跨域有几种常见的方式?你有没有跨域使用的经验? 方式: 使用jsonp实现跨域?使用cors实现跨域?浏览器另类的...

  • 跨站(跨域)单点登录的实现(SSO)

    本文分两部分 1.转他人的文章,详细介绍了跨站单点登录的原理和解决方案 2.我自己写代码,着重介绍里面的重点部分 ...

  • JSONP跨域

    JSONP原理及应用 之前的文章中简单介绍过前端可以实现的跨域方式,这次介绍一种更为常用的跨域方式,但这种跨域方式...

  • PHP的Oauth2 Server构建

    原因 我要做个登陆玩以前的登陆太low逼而且主要是想帮APP实现跨域登陆= =,嗯对就是这样 首先 先从源码从gi...

网友评论

      本文标题:跨域单点登陆的一种实现

      本文链接:https://www.haomeiwen.com/subject/byvnrftx.html