ホームページ  >  記事  >  php教程  >  PHPで実装したSSOシングルサインオンシステムアクセス機能の解析例

PHPで実装したSSOシングルサインオンシステムアクセス機能の解析例

高洛峰
高洛峰オリジナル
2016-12-28 16:07:012375ブラウズ

この記事の例では、PHP で実装された SSO シングル サインオン システム アクセス機能について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

SSO の英語の正式名は、Single Sign On、シングル サインオンです。 SSO は複数のアプリケーション システムにあります。ユーザーは 1 回ログインするだけで、相互に信頼されているすべてのアプリケーション システムにアクセスできます。これには、このプライマリ ログインを他のアプリケーションの同じユーザーのログインにマップできるメカニズムが含まれています。これは、現在最も人気のあるエンタープライズ ビジネス統合ソリューションの 1 つです。見てみましょう。

SSO シングル サインオン システムへのアクセス原理について簡単に説明します。前提として、システム自体が完全なユーザー認証機能、つまり、非常に便利な基本的なユーザー ログイン機能を備えていることが前提となります。

SSO ログイン リクエスト インターフェイスは通常、インターフェイスにコールバック アドレスを加えたもので、このチケット パラメーターを使用してインターフェイスをリクエストすると、ユーザー情報が取得されます。ユーザーがあれば自動的にログインします。存在しない場合は、新しいユーザーを追加してログインします。

たとえば、この SSO モデルは 2 つのメソッドを実装しています。1 つはインターフェイス URL を取得することであり、もう 1 つはチケットに基づいてユーザー情報を取得することです。

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 シングル サインオン システム アクセス機能のサンプル分析に関するその他の関連記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。