web-dev-qa-db-ja.com

JWTを使用して外部システムでユーザーを認証しますか?

親システムにリンクされるWordPressアプリケーションがあります。親との認証にJWTを使用します。ユーザーが親にログインしていない場合、WordPressサイトへのアクセスを許可しないでください(フロントエンドのみ、常にダッシュボードは厳密に管理者専用です)。ユーザーがブックマークまたは履歴を介してWordPressアプリケーションにアクセスしようとすると、ログインのために親サイトに送信する必要があります。認証を除き、親サイトに対してAPI呼び出しは行われません。 WPアプリには独自のデータがあるため。これは私に質問をもたらします。

  1. JWTは私たちの状況に適していますか?
  2. WordPressとどのように統合しますか?
  3. WPのネイティブ認証システムを変更してJWTで動作させる必要がありますか?

私の現在のアプローチはこれです:ユーザーは親システムにログインし、WordPressサイトへのリンクをたどります。 JWTトークンは、WPサイトへの投稿リクエストとして送信されます。おそらくinitアクションを使用してリクエストを解析し、WP固有のユーザー名とパスワードを取得します。次に、トークンに有効期限を設定し(本当に必要ですか?)、ユーザーをログインさせます。ユーザーがブックマークまたは履歴を介してアプリケーションにアクセスしようとすると、親サイトにリダイレクトします。

これは正しい方法ですか?もっと良い方法はありますか?必要に応じて詳細情報を提供させていただきます。

4

最近のコメントで、私が投稿したこの質問に注意が向けられました。このトピックに関する別の質問も投稿し、後でそれを解決して回答を投稿しました。 WPを使ったJWT認証 - アプローチ

この答えをここにコピーして、この実装に出くわすような人に役立つようにします。

  1. 私が認証することになっているとアプリでコーディングされたエンドポイントがトークンを準備します。
  2. トークンは指定された形式でなければなりません。
  3. それはそれからbase 64でエンコードされハッシュ暗号化されるべきです。
  4. トークンを抽出するために、wp_initハンドラーを使用して、エンドポイントによって送信されたPOST要求を処理する必要があります。
  5. 鍵は他の方法で共有され、復号化に使用されます。
  6. トークンが抽出されたら、同じ情報を持つローカルに生成されたトークンと比較します。
  7. クッキーに保存して、ページにアクセスするたびに確認してください。しばらくすると期限切れになるか、またはページアクセスごとにタイムスライスを増やし続けることができます。

エンドポイントはどの言語でもかまいません。また、これはその一般的な流れです、あなたはどこでもあなたが望むそれを使用することができます。

1