基于Cookie的SSO登录分析和实现,cookiesso登录_PHP教程
基于Cookie的SSO登录分析和实现,cookiesso登录
什么是SSO?
现在很多大的互联网公司都会有很多的应用,比如以下是淘宝网的截图:

天猫 聚划算 头条等都是不同的应用,有的甚至采用完全不同的域名,但是所有在淘宝注册的用户都是使用的一套用户名和口令,如果在这些系统直接切换做不到登陆状态的同 步,体验是非常差的。再举个栗子,很多公司内部系统也有很多个,比如HR系统,财务系统,考勤系统等等,如果员工在一个系统登陆了,跳转到另外一个系统还 需要登陆,就会让人很不爽...
基于此,SSO(Single Sign On)
应运而生。当然,我们来现实这个需求的方法有很多种,使用Cookie是其中比较简单的方式,主要需要解决的问题是:Cookie
是不能跨域传递的,如何将一个域的Cookie
通知给其它应用(不在同一个域)?
so
,如果你对cookie
机制不太熟悉,请先google
,并大致了解为什么cookie
会设计成不能跨域等相关问题。
如何实现?
SSO有以下几种方式实现
共享Cookie
当我们的子系统都在一个父级域名下时,我们可以将Cookie种在父域下,这样浏览器同域名下的Cookie则可以共享,这样可以通过Cookie加解密的算法获取用户SessionID,从而实现SSO。
但是,后面我们发现这种方式有几种弊端:
a. 所有同域名的系统都能获取SessionID,易被修改且不安全;
b. 跨域无法使用。
ticket验证,我们目前采取的是这种方式
这种实现的SSO有以下几个步骤:
a. 用户访问某个子系统,发现如果未登录,则引导用户跳转到SSO登录页面;
b. 判断SSO是否已经登录;
c. 如果已经登录,直接跳转到回调地址,并返回认证ticket;
d. 如果未登录,用户正确输入用户名/密码,认证通过跳转到回调地址,并返回认证ticket;
e. 子系统获取ticket,调用SSO获取用户uid等信息,成功后让用户登录。
前面已经说了,如何通过Cookie
来实现SSO
,主要是如何解决跨域问题。首先来谈谈Set-Cookie
中的domain
属性。
Cookie domain
为了让Http
协议在一定程度上保持上下文,server
在响应的头部可以加入Set-Cookie
来写入一些数据到客户端,Set-Cookie
中的domain
字段用来表示这个cookie
所在的域。
栗子:
我们访问www.cookieexm.com
,如果server
在返回头部中加入了Set-Cookie
,如果不指定domain
,那么默认这个cookie
的域就是www.cookieexm.com
,也就是只有访问www.cookieexm.com
时客户端才会把这个cookie
返给服务端。
如果我们指定domain
为.cookieexm.com
,那么客户端在访问以下域名:www.cookieexm.com www1.cookieexm.com a.cookieexm.com ***.cookieexm.com
时都能够把cookie
返回。
所以,我们得出一条结论:客户端对cookie的domain的匹配是从结尾进行匹配的,有了这个基础,我们就可以实现我们的SSO
登陆了。
cookie中需要注意的
- 设置为http-only
- 涉及登录凭证(如票据或者用户名)应该加密
- cookie不能存放隐私数据
具体方案
假设我们需要在如下子系统 **.a1.a2 **.b1.b2 **.c1.c2
间实现单点登录,首先我们需要一个专门用于单点登陆的认证系统(sso.s1.s2)。假设目前系统处于未登录状态,访问www.a1.a2
为例:

分别看一下每个步骤作用:
说明:
业务认证系统不一定存在,有些不是太敏感的系统可以直接从SSO Authorization
重定向到业务系统,并把SSO
的认证信息带过去。
承接上文,此时,如果用户访问www.b1.b2
应用,如下图所示:

与访问www.a1.a2
不同的是我们在重定向到SSO Authorization
时已经不需要再去输入用户名,因为sso.s1.s2
此时已经存有cookie
,直接用cookie
验证。
以上,就是一个简单的基于Cookie
的登陆系统。
其中几个问题需要重点解决
- 如何高效存储大量临时性的信任数据
- 如何防止信息传递过程被篡改
- 如何让SSO系统信任登录系统和免登系统
对于第一个问题,一般可以采用类似与memcached的分布式缓存的方案,既能提供可扩展数据量的机制,也能提供高效访问
对于第二个问题,一般采取数字签名的方法,要么通过数字证书签名,要么通过像md5的方式,这就需要SSO系统返回免登URL的时候对需验证的参数进行 md5加密,并带上token一起返回,最后需免登的系统进行验证信任关系的时候,需把这个token传给SSO系统,SSO系统通过对token的验证 就可以辨别信息是否被改过
对于最后一个问题,可以通过白名单来处理,说简单点只有在白名单上的系统才能请求生产信任关系,同理只有在白名单上的系统才能被免登录。
转载地址:http://www.jianshu.com/p/baa94d5f1673

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何使用PHP實現高效穩定的SSO單一登入引言:隨著網路應用的普及,使用者面臨大量的註冊和登入流程。為了提高使用者體驗,並減少使用者的註冊和登入間隔,許多網站和應用程式開始採用單一登入(SingleSign-On,簡稱SSO)技術。本文將介紹如何使用PHP實現高效穩定的SSO單一登錄,並提供具體的程式碼範例。一、SSO單一登入原理SSO單一登入是一種身分認證的解決

GitLab的權限管理和單一登入整合技巧,需要具體程式碼範例概述:在GitLab中,權限管理和單一登入(SSO)是非常重要的功能。權限管理可以控制使用者對程式碼倉庫、專案和其他資源的存取權限,而單一登入整合可以提供更方便的使用者認證和授權方式。本文將介紹如何在GitLab中進行權限管理和單一登入整合。一、權限管理專案存取權限控制在GitLab中,專案可以設定為私有

如何設計一個安全的MySQL表結構來實現單一登入功能?隨著互聯網的發展,用戶在不同的應用程式中需要登入不同的帳戶成為一種常見情況。為了提升使用者體驗與便利性,單一登入(SingleSign-On,簡稱SSO)技術應運而生。 SSO技術使得用戶可以透過一次登入存取多個應用程序,避免了頻繁輸入帳戶和密碼的麻煩。在設計一個安全的MySQL表結構來實現單一登入功能

如何使用PHP和OAuth進行單一登入在現代的網站和應用程式中,單一登入(SingleSign-On,簡稱SSO)已成為非常重要的功能。它允許用戶只需一次登入即可存取多個系統,大大提高了用戶體驗和工作效率。本文將介紹如何使用PHP和OAuth協定進行單一登入的實作。一、OAuth簡介OAuth是一種開放標準的授權協議,用於讓使用者授權第三方應用訪問

什麼是單一登入?原理是什麼?怎麼實現?以下這篇文章帶大家了解單一登錄,並聊聊使用Node實作單一登入SSO的方法,希望對大家有幫助!

隨著網路的高速發展,越來越多的網站和應用程式需要實現使用者單一登入(SingleSign-On,SSO)功能,以提供更便利和安全的使用者體驗。在此背景下,基於Swoole的SSO單一登入系統逐漸成為了業界關注的熱點。本文將為大家介紹如何設計實作一個基於Swoole的SSO單一登入系統。一、SSO單一登入系統設計想法SSO單一登入系統目的是實現使用者在一個系統中登

深入理解PHPSSO單一登入的工作原理和技術機制隨著網路的快速發展,各種網站和應用程式的數量也日益增加。使用者為了造訪不同的網站和應用,需要分別註冊不同的帳號和密碼,給使用者帶來了不便和麻煩。為了解決這個問題,單一登入(SingleSign-On,SSO)應運而生。 SSO是一種授權認證系統,在使用者登入成功後,可以實現使用者在多個系統中的無縫存取。本文將深入理解P

如何利用PHP函數實現使用者登入和登出的單一登入和權限驗證?隨著網路的發展,越來越多的網站或應用程式需要使用者登入來獲得更多的個人化服務或提升使用者體驗。而對於多個網站或應用,如果每個都要進行單獨的登入和權限驗證,將給使用者帶來不便。因此,單一登入(SingleSign-On,簡稱SSO)的概念應運而生。本文將介紹使用PHP函數實作單一登入和權限驗證的方法,並提供相
