シングルページアプリに Auth0 認証を追加しようとしています。私のアプリは app.mycompany.com などのドメインで実行されていますが、このアプリで使用される API は別のドメイン (api.mycompany.com など) で実行されています。
私はこのスレッドを知っています:
シングル ページ アプリ (SPA) のシングル サインオン (SSO) ソリューション/アーキテクチャ
ここでリンクされている auth0 の記事と github リポジトリ。しかし、いくつかの異なるシングルページ アプリ間でシングル サインオンを行う必要は必ずしもないため、私のシナリオは少し単純であると感じています。まず、API とアプリを分離したいだけです。
これが私がすでに試したことです:
React Login With Auth0の記事から始めて、スターター プロジェクトをダウンロードしました。問題なく確実にログインでき、Auth0 によって発行された JWS を含む id_token が localStorage に残ります。
また、api.mycompany.com (私の FeathersJS API アプリケーション) に直接ログインすることもできます。OAuth リダイレクト プロセス中に、id_token トークンが魔法のように私の Feathers アプリケーションによって発行された、feathers-jwt トークンに変換されていることがわかります。 auth0-ID に一致するユーザー オブジェクト。また、Auth0-ID から内部 ID へのマッピングに使用されるロジックも実装しました。さらに、トークンの検証やユーザーの人口など、すべての Feathers フックが機能しています。
私が理解できないのは、app.mycompany.com で実行されている react-application を localStorage の Auth0-token で変更して、このトークンが api.mycompany.com によって Feathers-jwt トークンに変換されるようにする方法です。後続のすべての API 呼び出しに、フェザーズ jwt トークンが自動的に含まれるようにして、API がユーザーを検証し、正しいデータを返すことができるようにします。
続行する方法についての提案は大歓迎です。
いくつかの背景の詳細:
- APIはnode.jsとfeatherjs(基本的にはExpressの拡張)に基づいて構築されています
- single-page-app は ReactJS 上に構築され、シンプルな Express サーバーによって提供されますが、http 経由で静的ファイルを提供できる任意のサーバーによって提供される可能性があります。single-page-app は、データを読み取って操作を実行するために、API に対して http 要求を行います。
API には、認証を処理する次のコード行があります。
const authentication = require('feathers-authentication'); const Auth0Strategy = require('passport-auth0').Strategy; app.configure(authentication({ local:false, token: { secret: 'mysecret', payload: ['email', 'auth0Nickname'], issuer: 'mycompany' }, idField: 'id', shouldSetupSuccessRoute: false, auth0: { strategy: Auth0Strategy, domain: 'mycompany.eu.auth0.com', 'clientID': 'xxx', 'clientSecret': 'yyy' } }));