> php教程 > PHP开发 > 본문

PHP에 구현된 SSO Single Sign-On 시스템 액세스 기능의 샘플 분석

高洛峰
풀어 주다: 2016-12-28 16:07:01
원래의
2402명이 탐색했습니다.

이 기사의 예에서는 PHP로 구현된 SSO Single Sign-On 시스템 액세스 기능을 설명합니다. 참고하실 수 있도록 모두와 공유해 주세요. 자세한 내용은 다음과 같습니다.

SSO의 정식 영문명은 Single Sign On, Single Sign-On입니다. SSO는 여러 응용 프로그램 시스템에 있습니다. 사용자는 한 번만 로그인하면 상호 신뢰되는 모든 응용 프로그램 시스템에 액세스할 수 있습니다. 여기에는 이 기본 로그인을 다른 애플리케이션의 동일한 사용자에 대한 로그인에 매핑할 수 있는 메커니즘이 포함되어 있습니다. 현재 가장 인기 있는 엔터프라이즈 비즈니스 통합 솔루션 중 하나입니다.

SSO Single Sign-On 시스템에 액세스하는 원리에 대해 간략하게 설명하겠습니다. 전제는 시스템 자체에 완전한 사용자 인증 기능, 즉 기본 사용자 로그인 기능이 있다는 것입니다. 이는 매우 편리합니다. .

SSO 로그인 요청 인터페이스는 일반적으로 인터페이스에 콜백 주소를 더한 것입니다. 이 주소에 액세스하면 콜백 주소로 이동하고 티켓 매개변수를 가져온 다음 인터페이스를 요청하면 사용자 정보를 얻을 수 있습니다. 사용자가 존재하는 경우 해당 사용자가 자동으로 로그인됩니다. 사용자가 존재하지 않는 경우 해당 사용자가 추가되어 로그인됩니다.

예를 들어, 이 SSO 모델은 두 가지 방법을 구현합니다. 하나는 인터페이스 URL을 얻는 것이고, 다른 하나는 티켓을 기반으로 사용자 정보를 얻는 것입니다.

interface SSOLogin
{
  /**
   * 获取登录用户信息
   * @param $ticket
   * @return mixed
   */
  public function getInfoFromTicket($ticket);
  /**
   * 单点登录授权地址
   * @return mixed
   */
  public function getAuthUrl();
}
로그인 후 복사

한 번 살펴보겠습니다. 콜백과 같은 컨트롤러의 주요 메소드에서 주소는 컨트롤러로 점프하는 주소입니다. http://www.example.com/sso/check?ticket=xxxx

/**
 * 检测是否单点登录
 * @return bool|string
 */
public function actionCheck()
{
  $ticket = Yii::$app->getRequest()->get('ticket');
  if (!$ticket) {
    return $this->renderAuthError(&#39;请先授权&#39;, sprintf(&#39;<a href="%s">点击登录单点登录系统</a>&#39;, SSOlogin::getInstance()->getAuthUrl()));
  }
  $userInfo = SSOlogin::getInstance()->getInfoFromTicket($ticket);
  if (empty($userInfo[&#39;username&#39;])) {
    return $this->renderAuthError(&#39;请先授权&#39;, sprintf(&#39;<a href="%s">点击登录单点登录系统</a>&#39;, SSOlogin::getInstance()->getAuthUrl()));
  }
  $username = $this->getUserName($userInfo[&#39;username&#39;]);
  $user = User::find()->canLogin()->username($username)->one();
  if (!$user) {
    $newUser = [];
    $newUser[&#39;username&#39;] = $userInfo[&#39;username&#39;];
    $newUser[&#39;email&#39;] = $this->getUserName($userInfo[&#39;username&#39;]);
    $newUser[&#39;role&#39;] = User::ROLE_DEV;
    $newUser[&#39;is_email_verified&#39;] = 1;
    $newUser[&#39;realname&#39;] = $userInfo[&#39;truename&#39;];
    $user = $this->addUser($newUser);
  }
  $isLogin = Yii::$app->user->login($user, 3600 * 24 * 30);
  if ($isLogin) {
    $this->redirect(&#39;/task/index&#39;);
  }
  return true;
}
로그인 후 복사

이해하시면 됩니다. 이 컨트롤러의 로직을 살펴보세요. SSO 인터페이스의 기능은 사용자 정보를 얻는 것입니다. 이 사용자 정보를 시스템 사용자 테이블과 비교하십시오. 사용자가 있으면 로그인하십시오. 사용자가 없으면 사용자를 작성하고 로그인하십시오.

이것은 백엔드에 통합된 내부 단일 지점 시스템입니다. 다른 SSO는 이와 다를 수 있지만 기본 원칙과 프로세스는 유사합니다.

이 글이 PHP 프로그래밍에 종사하는 모든 분들께 도움이 되기를 바랍니다.

PHP에 구현된 SSO Single Sign-On 시스템 액세스 기능의 샘플 분석에 대한 자세한 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿