单点登录相关-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

单点登录相关

montos 2020-04-20 18:01:32 311

[重庆-后端-谭鹏] 单点登录难点是 跨主域名的单点登录  我始终没想通。登陆淘宝后,再去访问天猫,天猫就不需要登录了。这个就不需要二次登陆了 这个地方前端是怎么拿到淘宝的票据再去访问天猫的?这个地方就是跨了主域名的 这个点我始终有点想不通

来源:云原生后端社区https://www.yuque.com/server_mind/answer

前端开发
分享到
取消 提交回答
全部回答(2)
  • YDYK
    2020-04-20 19:36:00

    这两个地方缓存不一样啊。自然就用不了。

    0 0
  • montos
    2020-04-20 20:44:31

    [上海-java-白夜] 前端跨域用jsonp封装js回调

    [健] 天猫和淘宝使用同一个SSO服务器。不管token  cookie 什么机制。同一个标识符,两个网站的辨识逻辑都是一样的
    **[重庆-后端-谭鹏] **这个标识符是什么呀 肯定的得前端携带了什么东西的在服务端进行鉴别的 不然服务端是怎么确定用户身份的,直到他已经在淘宝登陆过了

    [上海-java-白夜] 天猫,淘宝的认证中心都在一起的,cookie信息是在你客户端的,通过请求传到服务器去的
    localstorage 或者 cookie 的 一个token。 是什么无所谓。重要的是两个网站去同一个地方去校验token  所以结果是一样的。
    不管你哪个域,服务端的认证中心是同一个,阿里都是中台,怎么可能每个项目一个认证中心,基础服务都统一出来了
    你用它旗下的网站的服务,用的cookie里面的那个表示你身份的信息key都可以是同一个,你回调的时候把token作为js传过去不就行了,正常情况下,你认证成功,直接会把你的token跟在你要跳转的新页面一起跳转过去
    **[重庆-后端-谭鹏] 嗯 假设这一次是登陆了淘宝嘛,那我再访问天猫的时候 前端怎么携带淘宝登陆后返回的票据?如果不携带的话 认证服务 肯定就认为你没有登陆
    [上海-java-白夜] 或者你后端将cros设置一下也是可以跨域接收资源的,这个票据在你的cookie里面,cookie是在你的客户端浏览器储存的
    [重庆-后端-谭鹏] 哪一个的cookie ?淘宝登陆了的话肯定这个token是存在淘宝域名下的。 天猫怎么能拿到这个token的 这就是我的这个疑问点,还是说前端有这样的技术 可以拿跨主域名的的cookie信息吗
    [上海-java-白夜] **或者服务器端cros设置一下就可以跨了,或者nginx代理一下也是可以跨的

    [深圳-后端-章鱼] 说了半天,不如一张图清楚,关键在第七步,单点登录系统将ticket加载A系统的URL后面,A系统使用过滤器,将ticket写到自己域名下,应该没问题吧
    image.png
    [成都-java-creed]
    关键是输入用户名成功后,会生成sso认证的cookice,这个cookie就是跨域名访问的关键了
    [java-刘锦] 这个cookie是全局的?
    [杭州-后端-xinhe] 不是,每个域名各自维护自己的cookie,通过ticket传递用户身份
    [java-刘锦****] ticket是全局?
    [北京-java-犀利豆] ticket只用一次,session是全局的
    [杭州-后端-xinhe] 是的,我当时做的session各应用独立管理本地部分,但是生命周期会统一管理,全局统一登录登出和保活
    [深圳-后端-章鱼] 很强,关键就在sso.com认证中心自己的cookie
    [成都-java-creed]
    我认证sso自己的cookie是认证里面的关键,没有这玩不了的
    [杭州-后端-xinhe] 对,这个把整个流程串起来了

    [北京-JAVA-阿轩] 当我访问b系统,ticket哪里来的
    [成都-java-creed]
    1 用户在www.a.com正常上网,突然想访问www.b.com,于是发起访问www.b.com的请求。
    2 www.b.com接收到请求,发现第一次访问,于是给他一个重定向的地址,让他去找认证中心登录。
    3 浏览器根据返回的地址,发起重定向,因为之前访问过一次了,因此这次会携带上次返回的Cookie:认证中心。
    4 认证中心收到请求,发现cookie内容能取到对应的认证信息,生成ticket,并且返回给浏览器,让他重定向到www.b.com
    [北京-java-犀利豆] 登录了a系统 说明 你已经登录了oss。等你登录b的时候,b会让你先到oss那里领一个ticket。你用ticket到b那里验证,验证成功了,b给你种上cookie
    [北京-JAVA-阿轩] 同一个session去oss索取的ticket是一样的呗
    [北京-java-犀利豆] @北京-JAVA-阿轩 不一定一样。
    [深圳-后端-章鱼] session会被状态限制,cookie则是时间限制
    [北京-JAVA-阿轩]
    那b是通过解析ticket来确认是不是a登录过么
    [北京-java-犀利豆] 用户从oss拿到ticket,然后去b访问,b也会在后端 问一下oss,这个ticket是不是他发的。如果验证成功,b会给用户种上cookie。ticket就可以作废了。这个是后你去c,c会让你先去oss看看有没有ticket,如果有,就回到上面我说的流程。
    [java-刘锦] 那session干了啥
    [深圳-后端-章鱼] session只是用于获取token后,各自服务器里存用户的登录状态和权限等,方便后续的访问
    [北京-JAVA-阿轩] 那单点登录难点,和安全性,是哪里!感觉不难啊,安全也不太安全,窃取到了ticket,不就谁都可以登录了
    [北京-java-犀利豆]
    ticket是一次性的。
    [java-刘锦] 怎么保证一次性
    [北京-java-犀利豆] 在ticket里面,你可以加上ip之类的标识,加上时间,次数的限制,比ticket只能被校验一次,再来校验就不行了。手机充值卡怎么保证只能充一次,ticket就怎么保证只用一次。

    [北京-JAVA-阿轩] 跨域原理是什么
    [福建-后端-Rule] 浏览器同源策略
    [北京-java-犀利豆] ticket 你可放在url。或者header里面。就不存在跨越问题
    [北京-JAVA-阿轩] 这可以避免同源策略么
    [北京-JAVA-阿轩] 浏览器怎么做到同源策略的,怎么和服务器配合支持和不支持跨域的!跟TCP协议有关么
    [北京-java-犀利豆] 跨域是浏览器实现的安全策略
    [北京-JAVA-阿轩] 原来测试的时候,发现前端会有一个预请求!确认,接口无感知!这个是和什么打交道的
    [北京-java-犀利豆] option?
    [上海-JAVA开发] 这个一般解决跨服务器请求的,如果程序里面有第三方服务器的话会先发个option探探情况

    来源:云原生后端社区https://www.yuque.com/server_mind/answer

    0 0
添加回答
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程