[重庆-后端-谭鹏] 单点登录难点是 跨主域名的单点登录 我始终没想通。登陆淘宝后,再去访问天猫,天猫就不需要登录了。这个就不需要二次登陆了 这个地方前端是怎么拿到淘宝的票据再去访问天猫的?这个地方就是跨了主域名的 这个点我始终有点想不通
来源:云原生后端社区https://www.yuque.com/server_mind/answer
[上海-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写到自己域名下,应该没问题吧
[成都-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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。