2017-02-14 9 views
6

私は、テーマに基づいて接続されている2つのドメインに対してPHPで単純なSSOシステムを作成しようとしています。クロスドメイン認証のためのJWTトークン

ドメインAからローカルストレージにユーザー名を含む署名付きJWTトークンを格納できるかどうかは疑問でした。そして、成功した認証につながるドメインBからの同じ秘密鍵を使用してJWTを検証する。

私はいくつかの回答をgoogleで検索しましたが、認証の世話をする中間認証ドメインを含むいくつかの回答が見つかりました。しかし、私は、私が持っている2つのドメインをリンクするだけです。

ありがとうございました。

答えて

2

クロスオリジンデータストレージアクセスをsame-origin policy

によって許可されていないようなのlocalStorageとのIndexedDBとしてブラウザに格納されたデータへのアクセスは、原点によって分離されています。 各原点は独自の別の記憶域を取得し、ある原点のJavaScriptは別の原点に属する記憶域に対して読み書きできません。

通常の解決策は、インラインフレームを使用してドメイン横切って認証トークンをウサギ(AまたはBとすることができる)は、認証のために中央領域を有し、JWTまたはS を送信するドメイン間リダイレクションで動作するようになります。 here

のOpenID、OAuthのとSAMLプロトコルがリダイレクトで動作し、例えば、Googleのウェブスイートはトラフのiframeを接続する自分のアプリを持っている(また、GoogleはOpenIDのコネクト・プロバイダです)

+0

インラインフレームが素晴らしい作品に詳細を参照してください!ありがとう! – Ales

0

これを行うことができない理由はありません。 JWTは本当に特別なものではなく、単にセッションIDトークンに似たトークンです。 JWTと他のトークンとの違いは、データのペイロードを含むことができることです。

あなたが説明しているのは、基本的にOAuth 2.0のパスワードの付与です。 SSOシステムは、ユーザーを認証し、ユーザーにアクセストークンを提供できる認証サーバーです。この場合、アクセストークンは実際にJWTになります。ユーザー(リソース管理者)はアクセストークンを使用してリソースサーバー(他の関連ドメイン)にアクセスできます。これらのリソースサーバーはアクセストークンが有効であることを確認し、要求を許可または拒否できます。

PHPでOAuth 2.0を実装するには、次のライブラリを使用します:https://oauth2.thephpleague.com/ - ドキュメントにもいくつかの良い情報があります。ドメインAとドメインBから

関連する問題