>백엔드 개발 >PHP 튜토리얼 >시나 SSO 로그인 프로세스 분석

시나 SSO 로그인 프로세스 분석

巴扎黑
巴扎黑원래의
2016-12-01 11:14:111287검색

최근 Sina CAS의 로그인 프로세스를 연구한 결과 실제로 Sina의 sso는 yale-CAS를 구현하고 약간의 새로운 사항을 추가한다는 사실을 발견했습니다. 기본 인증 프로세스 상호 작용 프로세스는 변경되지 않았습니다. 그 독창성은 Ajax 싱글 로그인 구현인데, 이는 매우 훌륭합니다. 구현 원칙은 iframe+javaScript 콜백 함수입니다.

1. 주니어 SSO

기본 SSO는 최상위 도메인 이름의 쿠키를 심어 동일한 최상위 도메인 이름으로 통합 로그인을 구현하는 것입니다. 예:

Single Sign-On 주소: sso.xxx.com/login.jsp

애플리케이션 1: web1.xxx.com/login.jsp

애플리케이션 2 : web2 .xxx.com/login.jsp

애플리케이션 3: web3.xxx.com/login.jsp

로그인 프로세스:

상황 1: (사용자가 로그인한 적 없음)

1, 사용자가 web1.xxx.com/login.jsp에 액세스하고, web1이 sso.xxx.com/login.jsp로 리디렉션됩니다.

2, 사용자 입력 확인에 성공했습니다. sso.xxx.com은 .xxx.com 도메인 쿠키의 tokenid를 이식하고 web1.xxx.com/login.jsp로 리디렉션합니다. web1.xxx.com은 .xxx.com 도메인 쿠키의 tokenid에 액세스하여 로그인되고 시스템이 완료됩니다.

상황 2: (이미 로그인한 사용자) 직접 로그인하세요.

둘째, Sina SSO

Sina는 본질적으로 쿠키를 기반으로 하는 도메인 이름 전체에 걸친 통합 로그인을 실현합니다. 사용자가 쿠키를 비활성화하면 어쨌든 로그인할 수 없습니다. 예: Sina SSO 서버는 login.sina.com.cn/sso/login.php

이고 Weibo 로그인 주소는 weibo.com/login.php입니다. 첫 번째 수준 도메인 이름에 대한 로그인은 콜백 기능과 iframe을 통해 이루어집니다.

인증 과정의 구체적인 과정은 로그인한 적이 없는 사용자만 소개합니다.

1, 사용자가 weibo.com/login.php를 입력합니다

2, 사용자가 사용자 이름을 입력합니다. 입력이 완료된 후 사용자 이름 입력 상자의 포커스가 사라지면 페이지 번호는 ajax를 통해 login.sina.com.cn/sso/prelogin.php 서버에 요청을 보내고 매개 변수는 user(사용자 이름 방금 입력했습니다). 이 서비스는 콜백 함수를 통해 javascript 변수에 기록된 서버 시간 및 nonce 인증을 반환합니다.

3. 사용자가 비밀번호를 입력하고 클릭하여 로그인하면 페이지 POST 요청(login.php에서 전송되는 것이 아니라 ajax 요청임에 유의),

login.sina .com.cn/sso/login .php?client=ssologin.js(v1.3.12), 요청에 의해 시작된 페이지는 weibo.com/login.php의 보이지 않는 iframe 페이지이며, 매개변수는 서버 시간과 획득한 nonce입니다. 두 번째 단계에서는 사용자 이름과 암호화된 비밀번호를 입력합니다. login.sina.com.cn 아래에 심어진 쿠키 tgt로 돌아갑니다. 동시에 iframe 주소를 weibo.com/ajaxlogin.php?ticket=XXXXXX로 수정하세요. 티켓은 사용자의 로그인 및 서비스 자격 증명입니다.

4. iframe은 weibo.com/ajaxlogin.php?ticket=XXXXXX를 방문하여 사용자가 로그인하고 사용자의 로그인 정보를 기록하기 위해 .weibo.com에 설치된 쿠키를 반환합니다.

5. js를 통해 weibo.com/login.php를 다시 방문하세요. 쿠키가 작성되었으므로 로그인에 성공하고 서버는 302를 전송하고 사용자의 홈페이지로 리디렉션합니다. Weibo.com/userid .

6, 이제 로그인 과정이 완료되었습니다.

핵심사항: 상호작용 프로세스 분석 및 비밀번호 암호화 알고리즘.


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.