鹅滴神啊,上帝以及老天爷啊,不同域名下,前后端不分离的单点登录该怎么搞啊,我太难了。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dapengzhao

鹅滴神啊,上帝以及老天爷啊,不同域名下,前后端不分离的单点登录该怎么搞啊,我太难了。

  •  
  •   dapengzhao 2019 年 12 月 18 日 4304 次点击
    这是一个创建于 2319 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有大佬给个思路就成。 目前 cookie 的方法因为是不同域下所以不行 jwt token 的方法因为是不同域所以 token 没法加在 cookie 里面,因为不是前后端分离,所以没法在每次请求的时候加在 header 里面。 
    27 条回复    2020-06-24 16:54:31 +08:00
    s0f
        1
    s0f  
       2019 年 12 月 18 日
    token 可以存在 sessionStorage 或者 localStorage
    dapengzhao
        2
    dapengzhao  
    OP
       2019 年 12 月 18 日
    @s0f 不同域名,不同端口,sessionStorage 或者 localStorage 没法共享,就算可以共享,不是前后端分离,请求的时候也带不上。
    donnior
        3
    donnior  
       2019 年 12 月 18 日
    cookie 不用共享阿,各自一套,验证 token 再服务器端做
    lshero
        4
    lshero  
       2019 年 12 月 18 日
    就模仿一下 oauth 呗,都统一跳转到一个域名下检查登录呗,检查通过带参数回调请求登录的业务方网址,业务方网址校验完参数后写 cookie 呗
    vinHty
        5
    vinHty  
       2019 年 12 月 18 日
    https://juejin.im/post/5a002b536fb9a045132a1727
    看看这个,用一台服务器专门做验证。
    U7Q5tLAex2FI0o0g
        6
    U7Q5tLAex2FI0o0g  
       2019 年 12 月 18 日
    老哥你一个单点登录的问题纠结了 5 天,发了 4 个帖了。。。
        7
    lvxudong  
       2019 年 12 月 18 日
    OAuth 或者 SAML 都可以啊
    InkAndBanner
        8
    InkAndBanner  
       2019 年 12 月 18 日
    @littleylv 你上来就打楼主嘴巴子?
    dapengzhao
        9
    dapengzhao  
    OP
       2019 年 12 月 18 日
    @InkAndBanner 菜鸟不懂就问,大佬受累了
    acthtml
        10
    acthtml  
       2019 年 12 月 18 日
    做 OAuth2.0 就行
    fancy111
        11
    fancy111  
       2019 年 12 月 18 日
    jwt token 的方法因为是不同域所以 token 没法加在 cookie 里面,因为不是前后端分离,所以没法在每次请求的时候加在 header 里面???
    这句话没一个地方说对了,你再把这两点理解清楚一下吧。
    dapengzhao
        12
    dapengzhao  
    OP
       2019 年 12 月 18 日
    @fancy111 也可能是我理解有问题

    1 ( jwt token 的方法因为是不同域所以 token 没法加在 cookie 里面)是我要做单点登陆的几个网站不是在同一个域名下面,因此没法共享 cookie,也就是说我把登陆 a 网站拿到的 token 放在 cookie 里面,再去登陆 b 网站的时候依然拿不到 token 还是要登陆。

    2 (因为不是前后端分离,所以没法在每次请求的时候加在 header 里面)基于上面的原因,我想把 token 放在请求头里面,每次发请求的时候跟着请求头发过去,但是我们网站不是前后端分离,所以前端的跳转路由基本都是 href='/a/b'类似这种,并不是前后端分离那种请求接口类似这种 url='127.0.0.1:8000/account/'这种的话可以在每次请求的时候添加 token 到 header 里面。如果非要把所有路由改写成 ajax 方式请求成本太大不可能允许这样做。

    额。。。。不知道我说清楚了没有
    fancy111
        13
    fancy111  
       2019 年 12 月 18 日   1
    JWT 本身就是作为跨域来使用的,你先去学习一下 JWT 原理,你连原理都没懂就分析是在浪费时间。
    token 存入 cookie 是后端来交互的,你分别把 token 存在不同的域名 cookie 下就行了,后端获取到 cookie 再到单点登录服务器处理。。。 我字都不想打了,你还是去学习一下吧。
    还有后面的知识,我觉得你应该经验不足。
    dxl314
        14
    dxl314  
       2019 年 12 月 18 日
    cookie 可以存指定域下啊
    hoythan
        15
    hoythan  
       2019 年 12 月 18 日
    a 页面内嵌一个 iframe,
    从 a 访问到 b 域名,b 域名下做一个免登页面,地址栏带上 token,以及一些时间戳加密的验证之类的,然后 b 域名保存这个 token 到 cookie 即可实现无感知的免登。
    hoythan
        16
    hoythan  
       2019 年 12 月 18 日
    同理,b 页面登录的时候也可以生成一个隐藏的 iframe,访问到 a 页面的免登页面,地址栏传递 token 过去。
    dapengzhao
        17
    dapengzhao  
    OP
       2019 年 12 月 18 日
    @fancy111 谢谢回复
    看了很多
    4. JWT 的用法
    客户端接收服务器返回的 JWT,将其存储在 Cookie 或 localStorage 中。

    此后,客户端将在与服务器交互中都会带 JWT。如果将它存储在 Cookie 中,就可以自动发送,但是不会跨域,因此一般是将它放入 HTTP 请求的 Header Authorization 字段中。
    基本都是这么说的,我再多看看吧,可能还是没有理解透。
    EricInBj
        18
    EricInBj  
       2019 年 12 月 18 日
    CAS 了解一下。。。
    unsized
        19
    unsized  
       2019 年 12 月 18 日 via iPhone
    @fancy111 分别把 token 存在不同的域名 cookie 下就行了

    请问下这个如何实现
    walpurgis
        20
    walpurgis  
       2019 年 12 月 18 日 via Android
    标准答案 OAuth2,所有大厂登录系统都用这个方案,它的 RFC 里就是用普通的前后不分离网站做例子的
    jie170601
        21
    jie170601  
       2019 年 12 月 18 日 via Android
    感觉不用共享 cookie,如果 a 是认证中心地址,其他系统每次检测到当前请求未登录,就发重定向给浏览器,浏览器跳转到 a 的地址,会自动带上 a 的 cookie,a 只要判断浏览器传给自己的 cookie 有没有登录过就行了,与其他系统域名的 cookie 无关
    dapengzhao
        22
    dapengzhao  
    OP
       2019 年 12 月 18 日
    @jie170601 '其他系统每次检测到当前请求未登录'这句话就通不过。
    jie170601
        23
    jie170601  
       2019 年 12 月 18 日 via Android
    @dapengzhao 子系统也要维护自己的局部会话,登录了就可以不通过单点登录系统,不然每个请求都去单点登录走一遍?
    glaucus
        24
    glaucus  
       2019 年 12 月 18 日 via iPhone
    最近才做了这个....俩公司的系统做单点登录,建了个账号同步中间件
    fengbjhqs
        25
    fengbjhqs  
       2019 年 12 月 18 日
    @dapengzhao #22 每次打开网站,就判断是否登录,如果没有登录,就跳转到统一的登录地址,这个地址判断以前是否登录,如果登录了就直接跳回来,并附带 jwt,这样就可以了哇,
    bingfengwx
        26
    bingfengwx  
       2019 年 12 月 18 日 via Android
    问过度娘了吗??
    Shikyou
        27
    Shikyou  
       2020 年 6 月 24 日
    这一类实现单点登录的 user pool 云服务已经很多了,为什么还要自行开发呢?
    比如楼上说的国内的 Authing,还有美国的 Auth0 和 AWS Cognito 都行的(国内由于政策原因用不了)。
    用了以后就回不去了,再也无需开发、运维用户系统……
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1528 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 63ms UTC 16:51 PVG 00:51 LAX 09:51 JFK 12:51
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86