外部の「ディレクトリサービス」とのSSO /認証の統合


15

クライアントのプロトタイプの作業を開始しようとしています-必要な機能の1つは、社内のユーザー認証/登録システムとの統合です。

このシステムは権限のあるユーザーデータベースとして機能し、新しいユーザーを作成し、有効なユーザーを認証するためのRESTfulインターフェイスを提供します。

  1. WPで新しいユーザーを作成し、そのプロセスの一環として外部認証APIを呼び出して、そのユーザーを作成/検証する必要があります。

  2. 有効なユーザーであるがWPに知られていない人は、WPサイトに自分で登録する必要なく、ログインしてコメントできる必要があります。

  3. Webサイト全体にログインしている人もWordPressに自動的にログインする必要があります。

私は次のことが進むべき道だと考えています。

  • (1)の場合-使用できる登録フックはありますか?

  • (2)-認証フィルターをフックすると仮定しています-つまり、誰かがログインしようとすると、私はそれをトラップし、外部システムに呼び出しを行い、WPログインを処理するか、登録プロセスにリダイレクトします1)エルを取る。

  • (3)の場合-メインサイトによって設定されたログインCookieを読み取り、(2)に進みますか?

ユーザーとusermetaテーブルにもレコードを挿入する必要があると思います。

だから、上記は理にかなっています-私は何かについて考えていませんか?誰もがこれを支援するための優れたリソースを手に入れました(@hakre-あなたはこれについていくつかの仕事をしたことがわかりました!!)。

更新

だから私はまだこれに少し頭を打ち続けている、本質的に私は認証フィルターにフックしようとしていて、それを使って:

  1. 「マスター」サイトのログインCookieが設定されているかどうかを確認し、設定されている場合、認証APIに対して再検証し、有効な場合wp_signon()、マスターサイトCookieに含まれる情報(電子メールおよびハッシュ化されたパスワード)を使用してWPログインを強制しますWPの資格情報として
  2. Cookieが設定されていない場合は、マスターサイトのログインページにリダイレクトし、ログイン/サインアップを取得してから手順1に戻ります。
  3. 認証されたマスターサイトユーザーが存在するときにWPユーザーがいない場合は、作成してから「透明な」サインオンを作成します(つまり、ユーザーにWPログインフォームが表示されない)

基本的には、主にコメントするだけのユーザーに対してWPログインフォームを完全に非表示にし、後で作成者と管理者が直接アクセスできるようにする方法を見つけたいと思います。

それはかなりゆっくりと進んでいます、ここに私がいくつかの助けを使うことができるものがあります:

  • 認証フィルターは正しいものですか?それは私が期待するすべての状況で呼び出されるようではありません-例えば、メタウィジェットは認証フックの起動なしでログイン/ログアウトリンクを表示します

  • オブジェクトwp_signon()を返すことができWP_Userます(成功を示す)が、ログイン状態には影響しません。つまり、更新後もメタウィジェットは「ログイン」と表示されます。

ありがたいことに受け取った助け:)


多分これは別の質問にすべきでしょうか?
アヌ

ああ、これが言及されることさえ許されているかどうかはわかりませんが、私は喜んで半日かそこらのためにこれについて助けてくれます-私のプロフィールの連絡先の詳細。
アヌ

回答:


12

OK、私のために働いているアプローチは次のとおりです:

  1. メインサイトのユーザーデータベースが信頼できると仮定します。メインサイトのログインCookieには、IDとサイトパスワードのハッシュが含まれています。

  2. メインサイトからCookieを取得し、メインサイトの認証APIに対して再検証します

  3. 有効な場合、戻り値の電子メールアドレス'user_login'をWPの値として使用し、ハッシュ化されたサイトパスワードをWPパスワードとして使用します。

  4. を使用して、このユーザーがWPに存在するかどうかをテストしwp_authenticate('user_login', 'user_pass')ます。これはWP_User成功するとオブジェクトを返し、WP_Error失敗するとオブジェクトを返します。

  5. の場合WP_Error/is_wp_error()、useを使用wp_update_user()してユーザーを作成します(または、パスワードを変更してユーザーを更新します)。

  6. ログインを介したwp_set_current_user()wp_set_auth_cookie()do_action('wp_login, id)

(これはすべて、'init'アクションに関連付けられている関数に含まれています)

これは機能しているようです-WPに不明な有効なサイトユーザーが自動的に作成されます。パスワードの変更に対応しており、サイトCookieが設定されていて、WPユーザーが存在する場合、SSOは自動的かつ非常にシームレスです。


1
+1すばらしい説明/回答。いつの日かもう少し詳細を表示する時間を見つけてください。他の人がトライアル/エラーの大部分を回避するのに役立ちます;)
kaiser

1
これはまさに私が探しているものです、もう少しプロセスを説明できますか?特別なステップ1、2、3は私にはあまり明確ではありません。ありがとう!!
chifliiiii

3

認証システム全体がプラグ可能です。既存のプラグインを調べて、システムをオーバーライドする方法を理解することをお勧めします。おそらくいくつかのLDAPプラグインを見ることで?


はい、とんでもないことを意味せず、それは明らかです!!
アヌ

:ユーザーの署名オンの状態を反映してかもしれないのヘルプは、この他の質問に対する私の答えを参照することをいくつかの情報についてはwordpress.stackexchange.com/questions/8998/...
ドゥーガル・キャンベル

1

いくつかのユーザ関連の機能に条件付きで定義された!function_exists()中にwp-includes/pluggable.php、あなた自身のバージョンで上書きするのは簡単です。


1

WordPressでシングルサインオンを有効にすると、18時間以上も苦労しましたが、ほんの数分しかかかりませんでした。

基本的に、あなたが使用したいと思うhttps://wordpress.org/plugins/wp-force-login/との修正バージョンhttps://as.wordpress.org/plugins/jwt-authenticator/をして、認証を作成します-JWT(JSON Web Token)を生成し、WordPressサイトの特別なURLにリダイレクトするメインサイト上の保護されたエンドポイント。

完全なコードはこちらをご覧ください。


ご回答有難うございます。リンクは消えることがあり、回答が役に立たなくなる可能性があるため、リンクのみの回答は推奨されません。ここに関連するビットを含めることをお勧めします。
カイザー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.