私はリフレッシュトークンを使用することはJavaScriptアプリケーションにとって安全ではないと思います - /token
エンドポイントにアクセスし、アプリケーションの秘密を使って認証する必要があります。しかし、このようなアプリケーションでは秘密が公開されます。
prompt=none
パラメータ(OpenID Connectから)を使用して、/auth
エンドポイントからOAuth2暗黙的なフローと新しいトークンを取得することをお勧めします。しかし、暗黙のフローを使用すると、より長いIDトークンを取得し(後でIDトークンを使用してアクセストークンを要求する)、OAuth2で「remember me」を実装する必要があります(より良いオプション - 応用)。それはまた、タブ間でトークンを渡すことで問題#2を解決するでしょう。
- 「セッション」とは、リフレッシュトークンを使用して30日間アクセストークンを生成することです。それが問題であれば、例えば何かのアクティビティがない場合にユーザをログアウトさせるアクティビティ検出器を実装することができます。 30分。
- メッセージパッシングサービスの一種として
localStorage
を使用することができますので、sessionStorage
にトークンを保存できますが、新しいタブではlocalStorage
を使用して既存のタブからトークンを要求できます。詳細情報については参照http://www.codediesel.com/javascript/sharing-messages-and-data-across-windows-using-localstorage/
リンク先の記事から
コード例:
function eventListener(e) {
if (e.key == 'storage-event') {
output.innerHTML = e.newValue;
}
}
function triggerEvent() {
localStorage.setItem('storage-event', this.value);
}
window.addEventListener("storage", eventListener, true);
data.addEventListener("keyup", triggerEvent, true);
ワークフローは次のようになります:
- 新しいタブを開いたとのlocalStorageに任意の値を書き込みされますそれはトークンが必要であることを示すキーである。キーは "newTabOpened"にすることができます。新しいタブは、別のキー "oauth2token"の変更を聞き取り始めます。
- 既存のタブは "newTabOpened"キーの変更をリッスンし、反応としてトークン値を "oauth2token"キーの下に書き込みます。
- 新しいタブはトークンを読み取り、それをlocalStorageから削除します。
私はlocalStorageを使用してウィンドウ間でトークンを渡すことを考えましたが、意図せずにlocalStorageにアクセス/リフレッシュトークンを残す可能性があります。 – Pardoner
新しいタブでは、トークンを読み込んだ後、 'localStorage'からトークンを削除できます。 –
そうですが、問題は、新しいタブを開くためにlocalStorageに配置する必要があることです。しかし、新しいタブが開かれないと、そこでそこに座ります。 – Pardoner