鍍金池/ 問(wèn)答/Java  PHP  Python  HTML/ 前后端分離如何實(shí)現(xiàn)單點(diǎn)登錄?

前后端分離如何實(shí)現(xiàn)單點(diǎn)登錄?

假設(shè)api接口為api.a.com
在login.a.com完成了登錄操作
實(shí)現(xiàn)在訪問(wèn)b.com和c.com時(shí)默然為登錄狀態(tài)
用戶login后,后端會(huì)返回一個(gè)token標(biāo)識(shí)用戶
無(wú)論是cookie還是localStorage都是不能跨域訪問(wèn)的,如何在跨站是能拿到用戶標(biāo)識(shí),保存用戶狀態(tài)呢?
類似淘寶登錄后,訪問(wèn)天貓時(shí)已登錄
求給一個(gè)解決思路

回答
編輯回答
何蘇葉

1.[b.com]在發(fā)現(xiàn)未登錄時(shí)跳轉(zhuǎn)至[a.com]進(jìn)行登錄
2.[a.com]在登錄完成后將登錄authcookie與用戶信息記錄到服務(wù)器(session_id或者redis都可以)
3.同時(shí)[a.com]創(chuàng)建一個(gè)令牌token關(guān)聯(lián)上一步的authcookie,并帶回[b.com]backUrl
4.[b.com]拿到[a.com]發(fā)回來(lái)的令牌去調(diào)用[a.com]的接口查詢是否令牌有效并且可以查到用戶信息,有的話則拿回?cái)?shù)據(jù)并做后續(xù)操作

以上是單點(diǎn)登錄的基本流程,PS:?jiǎn)吸c(diǎn)登錄與前后端分離沒(méi)有關(guān)系。

2017年10月29日 10:53
編輯回答
編輯回答
伴謊

一個(gè)項(xiàng)目地址為a.aaa,另一個(gè)是a.bbb,可以用cross-storage,吧token放在a下

2017年8月22日 15:11
編輯回答
冷咖啡

不是b.com, c.com默認(rèn)為登錄狀態(tài).

而是訪問(wèn)b.com, c.com時(shí), 先跳轉(zhuǎn)到login.a.com, 因?yàn)樵赼.com上已經(jīng)登錄, 所以直接跳轉(zhuǎn)回b.com, c.com, 同時(shí)把登錄信息帶上.

2017年8月12日 05:44
編輯回答
氕氘氚

前面幾個(gè)人講流程的基本正確:

  1. 訪問(wèn)b.com,b.com發(fā)現(xiàn)用戶沒(méi)登陸,跳轉(zhuǎn)到a.com

  2. a.com發(fā)現(xiàn)用戶已經(jīng)在a.com登陸,再跳轉(zhuǎn)回b.com,將登陸信息帶上

問(wèn)題就是所謂的登陸信息是什么,這個(gè)肯定不是cookie,也不會(huì)是用戶名密碼什么的。

這個(gè)需要a.com和b.com相互約定傳的是什么東西。

你可以參考CAS相關(guān)文檔。

2017年2月28日 17:18
編輯回答
怣人

早上看的。來(lái)自掘金

2018年5月10日 01:41
編輯回答
巴扎嘿

用戶訪問(wèn)www.domain.com的時(shí)候,ajax異步(跨域)請(qǐng)求http://api.domain.com/check_l... 檢查是否已經(jīng)登錄。至于解決跨域問(wèn)題,可以通過(guò)jsonp或者api.domain.com服務(wù)器配置Access-Control-Allow-Origin 允許跨域請(qǐng)求。如果之前已經(jīng)在api.domain.com登錄過(guò),那么瀏覽器會(huì)緩存登錄信息,去請(qǐng)求URL的時(shí)候,會(huì)自動(dòng)帶上相關(guān)的cookie/session,該接口可以返回登錄賬戶相關(guān)個(gè)人信息或者別的想要的信息;如果沒(méi)有登錄,則跳轉(zhuǎn)到登錄頁(yè)面。

2017年11月13日 19:29
編輯回答
涼心人

訪問(wèn)b.com,用戶需要登錄跳轉(zhuǎn)到login.a.com,驗(yàn)證登錄成功信息cookie存在login.a.com下面,并將其當(dāng)成url參數(shù)返回到b.com并存cooike到b.com,下次打開(kāi)b.com就不需要跳轉(zhuǎn)登陸了。
這時(shí)候訪問(wèn)c.com,又跳轉(zhuǎn)login.a.com直接將cookie信息返回到c.com并存起來(lái)。

2017年4月24日 22:20
編輯回答
愛(ài)礙唉

說(shuō)2個(gè)簡(jiǎn)單方法把:
1.類似ucenter的邏輯,按你舉例,3個(gè)站,登錄時(shí)候,調(diào)用每個(gè)站的一個(gè)頁(yè)面,就ok了,解決了你的跨域
2.跨站鏈接加參數(shù),比如你的a.com跳轉(zhuǎn)b.com時(shí)候,鏈接為b.com?access_token=dskfakldjfi

2018年5月3日 12:50