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

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

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

回答
編輯回答
何蘇葉

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

以上是單點登錄的基本流程,PS:單點登錄與前后端分離沒有關(guān)系。

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

一個項目地址為a.aaa,另一個是a.bbb,可以用cross-storage,吧token放在a下

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

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

而是訪問b.com, c.com時, 先跳轉(zhuǎn)到login.a.com, 因為在a.com上已經(jīng)登錄, 所以直接跳轉(zhuǎn)回b.com, c.com, 同時把登錄信息帶上.

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

前面幾個人講流程的基本正確:

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

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

問題就是所謂的登陸信息是什么,這個肯定不是cookie,也不會是用戶名密碼什么的。

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

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

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

早上看的。來自掘金

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

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

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

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

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

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

2018年5月3日 12:50