찾다
백엔드 개발PHP 튜토리얼基于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属性。

为了让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

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1068261.htmlTechArticle基于Cookie的SSO登录分析和实现,cookiesso登录 什么是SSO? 现在很多大的互联网公司都会有很多的应用,比如以下是淘宝网的截图: 天猫 聚划...
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
如何使用PHP实现高效稳定的SSO单点登录如何使用PHP实现高效稳定的SSO单点登录Oct 15, 2023 pm 02:49 PM

如何使用PHP实现高效稳定的SSO单点登录引言:随着互联网应用的普及,用户面临着大量的注册和登录过程。为了提高用户体验,并减少用户的注册和登录间隔,许多网站和应用开始采用单点登录(SingleSign-On,简称SSO)技术。本文将介绍如何使用PHP实现高效稳定的SSO单点登录,并提供具体的代码示例。一、SSO单点登录原理SSO单点登录是一种身份认证的解决

GitLab的权限管理和单点登录集成技巧GitLab的权限管理和单点登录集成技巧Oct 21, 2023 am 11:15 AM

GitLab的权限管理和单点登录集成技巧,需要具体代码示例概述:在GitLab中,权限管理和单点登录(SSO)是非常重要的功能。权限管理可以控制用户对代码仓库、项目和其他资源的访问权限,而单点登录集成可以提供更方便的用户认证和授权方式。本文将介绍如何在GitLab中进行权限管理和单点登录集成。一、权限管理项目访问权限控制在GitLab中,项目可以被设置为私有

如何设计一个安全的MySQL表结构来实现单点登录功能?如何设计一个安全的MySQL表结构来实现单点登录功能?Oct 31, 2023 am 08:33 AM

如何设计一个安全的MySQL表结构来实现单点登录功能?随着互联网的发展,用户在不同的应用程序中需要登录不同的账户成为一种常见情况。为了提升用户体验和便利性,单点登录(SingleSign-On,简称SSO)技术应运而生。SSO技术使得用户可以通过一次登录即可访问多个应用程序,避免了频繁输入账户和密码的麻烦。在设计一个安全的MySQL表结构来实现单点登录功能

如何使用PHP和OAuth进行单点登录如何使用PHP和OAuth进行单点登录Jul 29, 2023 pm 12:37 PM

如何使用PHP和OAuth进行单点登录在现代的网站和应用程序中,单点登录(SingleSign-On,简称SSO)已经成为一种非常重要的功能。它允许用户只需一次登录就能够访问多个系统,极大地提高了用户体验和工作效率。本文将介绍如何使用PHP和OAuth协议进行单点登录的实现。一、OAuth简介OAuth是一种开放标准的授权协议,用于让用户授权第三方应用访问

聊聊基于Node实现单点登录(SSO)的方法聊聊基于Node实现单点登录(SSO)的方法Dec 06, 2022 pm 07:49 PM

什么是单点登录?原理是什么?怎么实现?下面本篇文章带大家了解一下单点登录,并聊聊使用Node实现单点登录SSO的方法,希望对大家有所帮助!

基于Swoole的SSO单点登录系统设计实践基于Swoole的SSO单点登录系统设计实践Jun 14, 2023 pm 04:08 PM

随着互联网的高速发展,越来越多的网站和应用需要实现用户单点登录(SingleSign-On,SSO)功能,以提供更加便捷和安全的用户体验。在此背景下,基于Swoole的SSO单点登录系统逐渐成为了业界关注的热点。本文将为大家介绍如何设计实现一个基于Swoole的SSO单点登录系统。一、SSO单点登录系统设计思路SSO单点登录系统目的是实现用户在一个系统中登

深入理解PHP SSO单点登录的工作原理和技术机制深入理解PHP SSO单点登录的工作原理和技术机制Oct 15, 2023 am 09:19 AM

深入理解PHPSSO单点登录的工作原理和技术机制随着互联网的快速发展,各种网站和应用的数量也日益增多。用户为了访问不同的网站和应用,需要分别注册不同的账号和密码,给用户带来了不便和烦恼。为了解决这个问题,单点登录(SingleSign-On,SSO)应运而生。SSO是一种授权认证系统,在用户登录成功后,可以实现用户在多个系统中的无缝访问。本文将深入理解P

如何利用PHP函数实现用户登录和注销的单点登录和权限验证?如何利用PHP函数实现用户登录和注销的单点登录和权限验证?Jul 26, 2023 pm 07:02 PM

如何利用PHP函数实现用户登录和注销的单点登录和权限验证?随着互联网的发展,越来越多的网站或应用需要用户登录来获取更多的个性化服务或提升用户体验。而对于多个网站或应用,如果每个都要进行单独的登录和权限验证,将给用户带来不便。因此,单点登录(SingleSign-On,简称SSO)的概念应运而生。本文将介绍使用PHP函数实现单点登录和权限验证的方法,并提供相

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.