>  기사  >  백엔드 개발  >  PHP에서 Single Sign-On을 구현하는 원리는 무엇입니까?

PHP에서 Single Sign-On을 구현하는 원리는 무엇입니까?

PHPz
PHPz원래의
2020-09-25 16:01:362920검색

싱글 사인온을 구현하는 PHP의 원칙은 다음과 같습니다. 먼저 클라이언트 쿠키에 대한 신뢰를 저장한 다음 쿠키를 추가로 확인합니다. 대량의 임시 신뢰 데이터를 효율적으로 저장하기 위해 memcached와 유사한 분산 캐시 솔루션을 사용할 수 있습니다.

PHP에서 Single Sign-On을 구현하는 원리는 무엇입니까?

Single Sign On SSO(Single Sign On)는 단순히 여러 시스템이 공존하는 환경에서 사용자가 한 곳에서 로그인한 후 다른 시스템, 즉 사용자는 한 번만 로그인하면 다른 모든 시스템에서 신뢰할 수 있습니다.

(관련 추천: php training)

Single Sign-On은 Alibaba와 같은 대규모 웹사이트에서 매우 자주 사용됩니다. 웹사이트 뒤에는 사용자가 운영할 수 있거나 거래에 협력이 포함될 수 있습니다.

각 하위 시스템에 사용자 인증이 필요한 경우 사용자도 미쳐버릴 뿐만 아니라 반복되는 인증 및 승인 논리로 인해 각 하위 시스템도 미쳐버릴 것입니다.

최종 분석에서 Single Sign-On을 구현하는 것은 해당 신뢰를 생성하고 저장하는 방법과 다른 시스템에서 이 신뢰의 유효성을 확인하는 방법을 해결하는 것입니다.

그래서 주요 사항은 다음과 같습니다.

1. trust

2. Trust 검증

위의 문제가 해결되고, 처음에 언급한 효과가 달성된다면 SSO라고 할 수 있습니다.

SSO를 구현하는 가장 간단한 방법은 쿠키를 사용하는 것입니다. 구현 프로세스는 다음과 같습니다.

PHP에서 Single Sign-On을 구현하는 원리는 무엇입니까?

위의 솔루션은 클라이언트의 쿠키에 신뢰를 저장하는 것임을 찾는 것은 어렵지 않습니다. 구현하기 쉬우면 사람들이 즉시 혼란스러워질 것입니다.

1. 쿠키는 안전하지 않습니다

2. 교차 도메인 로그인은 허용되지 않습니다.

첫 번째 문제는 일반적으로 쿠키를 암호화하여 해결됩니다. 실제로 이 솔루션은 클라이언트에 이러한 신뢰 관계를 저장하는 것입니다. 이를 달성하기 위해 반드시 쿠키를 사용할 필요는 없습니다. 또한 플래시의 공유 객체 API를 사용하여 저장 기능을 제공할 수도 있습니다.

일반적으로 대규모 시스템은 서버측에 신뢰 관계를 저장합니다. 구현 프로세스는 다음과 같습니다.

PHP에서 Single Sign-On을 구현하는 원리는 무엇입니까?

위의 솔루션은 신뢰 관계를 별도의 SSO 시스템에 저장하는 것입니다. 단순히 클라이언트에서 서버로 이동한 것처럼 들리지만 몇 가지 문제를 해결해야 합니다.

1. 대량의 임시 신뢰 데이터를 효율적으로 저장하는 방법

2. 정보 전송 프로세스가 변조되는 것을 방지하는 방법

3, SSO 시스템이 로그인 시스템과 바인딩 시스템을 신뢰하도록 만드는 방법

첫 번째 질문의 경우 일반적으로 memcached와 유사한 분산 캐시 솔루션을 사용할 수 있습니다. 이는 확장 가능한 데이터 볼륨을 위한 메커니즘을 제공할 수 있을 뿐만 아니라 효율적인 액세스도 제공합니다.

두 번째 질문의 경우 일반적으로 디지털 인증서 서명이나 md5와 같은 방법을 통해 디지털 서명 방법을 채택합니다. 이를 위해서는 SSO 시스템이 로그인 URL을 반환할 때 md5로 확인해야 하는 매개변수를 암호화해야 합니다. 가져오기 토큰을 입력하고 함께 반환합니다.

마지막으로 신뢰 관계를 확인하기 위해 시스템에 로그인해야 할 때 SSO 시스템에 토큰을 전달해야 정보가 수정되었는지 확인할 수 있습니다. 토큰을 확인하여.

마지막 문제는 화이트리스트를 통해 해결 가능합니다. 쉽게 말하면 화이트리스트에 있는 시스템만이 생산 신뢰 관계를 요청할 수 있습니다. 마찬가지로 화이트리스트에 있는 시스템만 로그인을 면제할 수 있습니다.

위 내용은 PHP에서 Single Sign-On을 구현하는 원리는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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