あなたが認証サービスにコールバックURLを提供し、あなたはあなたがSPAやAPIでルートを扱うかどうかを決定します。 Oauth認証(簡略化)には2つのステップがあります。 githubの上のイラスト:
ステップ1)https://github.com/login/oauth/authorize?client_id=*YOUR_CLIENT_ID*$redirect_uri=*YOUR_REDIRECT_URI*
は、あなたのアプリケーションを許可するユーザーを要求したポップアップダイアログを開くとクエリパラメータのコードを使用してREDIRECT_URI = AUTHORIZATION_CODE
ステップ2)に成功したリターン?あなたは上記のAUTHORIZATION_CODEを長期アクセストークンのために交換します
あなたのアーキテクチャでは、SPAのステップ1と残りのAPIのステップ2を実行する必要があります。認証プロバイダから認証コードを取得し、残りのAPIに送信し、残りのAPIを長期アクセストークンに交換し、そのトークンをデータベースに保存し、それを使用してユーザー情報を取得するか、または行うあなたがそれで何でもしたいなら、ユーザーにログインしてください。
手順1では、手順2のCLIENT_IDとCLIENT_SECRETだけでCLIENT_IDが必要です。このため、CLIENT_SECRETをサーバー側に保存することで、アプリケーションを安全に保つことができます。
残りのapiによってコールバックURIが処理されるという問題は、コールバックuriがSPAではなく認証プロバイダ(この場合はgithub)によって呼び出されるため、リダイレクトする応答を送信できないことですユーザーをホームページに誘導する。これはテンプレートとルーティングがサーバー側で処理された場合にのみ機能します。これは、ご使用のアーキテクチャーには当てはまりません。
app.post('/login', passport.authenticate('github'),
のようなルートにパスポートミドルウェアを登録すると、ミドルウェアは「コード」クエリパラメータにAUTHORIZATION_CODEが含まれているかどうかを確認し、そうでない場合はステップ1を実行しますステップ2。
Martonさん、ありがとうございましたが、手順2で、SPAは残りのAPIにトークンを戻します。どのようにしてAPIを確認することができますか?私たちは郵便配達員を使って無効なトークンを残してAPIを休止することができるからです。 –
私は分かりません。どのトークンとそれを検証したいのですか? – marton