什麼是單點登入?(SSO)
很早之前,網際網路還沒有怎麼發達,需要應用都隻有一台service。但是随着科技的發展,service越來越多,登入的時候就會變得非常繁瑣,比如百度,百度網盤,百度圖庫。這些都是百度系列的子產品,如果你要使用的話,就需要一個一個地登入,退出也要一個一個的退出,這樣使用者體驗就非常不好。這就造成單點登入的産生。單點登入隻需要登入一次,退出一次就行了,登入一次就可以使用整個系列的所有子產品。
單點登入三種方式
-
Session廣播機制
簡單的來說session廣播機制就是session共享,使用者登入後,把使用者資訊存儲到服務端的session中,然後共享給其他子產品。這樣就可以實作一次登入即可。當然共享session也會消耗一定的節點資源。
-
cookie+redis
redis是安裝key-value的方式存儲的。
使用者在任何一個子產品登入,在redis中存儲
key存儲随機生成的唯一值 value存儲使用者資料
登入後把redis中的key存儲到cookie中,以後登入其他子產品的時候都會發送cookie,其他子產品解析cookie,将得到的key在redis進行比對,如果可以比對的到,就說明已經登入過,無需再次登入了。這就可以達到單點登入。
-
token
token是按照一定規則生成的字元串。
在項目中的某一個子產品登入成功後就會生成一個token。token中的有效載荷包含使用者資訊。将token放放到request中的頭資訊中,以後帶着請求去通路其他子產品時,隻需要解析request的頭資訊中的token内容,如果頭資訊中有token,就說明登入成功,就無需再次登入。如果想要使用者資訊,隻需要解析token就可以得到使用者資訊。
到這邊,單點登入的介紹和實作方式就已經介紹完成了。補充:一般單點登入用于微服務架構或者分布式部署的伺服器中,因為這些都是service比較多的。