私はかなり初心者で、フローの一部 (またはどのベスト プラクティスを使用すべきか) を理解するのに苦労していますOAuth 2.0
...OpenID Connect
長い投稿で申し訳ありません:)
私のセットアップ:
(
OP
OpenID プロバイダー) は、基本的にと を使用してユーザーを認証および承認するexpress
サーバーです。呼びましょうoauth2orize-openid
passport
http://authserver.com
my に対してユーザーを認証する必要がある
Single page application
(react+webpack) 、それをOP
呼び出しましょうhttp://my-spa.com
これはSPA(webpackによって静的に提供される)なので、使用する必要がありますImplicit Flow
。
私の質問
ユーザーが に移動すると、アプリケーションがロードされ、 が存在するかどうかhttp://my-spa.com
がチェックされます。localStorage
id_token
いいえid_token
オンlocalStorage
ロード:
- トークンがないので、リダイレクトします
http://authserver.com/dialog/authorize
response_type=id_token
scope=openid profile
- ユーザーが正常に認証および承認されると、URI フラグメント内のに
authserver
リダイレクトされますmy-spa
id_token
- に保存する
id_token
とlocalStorage
、ユーザーはアプリの使用を開始できます。
ロード中id_token
ですlocalStorage
ユーザーがブラウザを閉じて、再度開きました。これは、私が何をすべきかを理解するのに苦労しているところです。(以前のログインからの) トークンが既に存在するため、それが有効かどうかを確認する必要があります。
そのためのベストプラクティスは何ですか? これが私が正しいと思うものです:
- を使用するようにリダイレクト
http://authserver.com/dialog/authorize
:prompt=none
id_token_hint=CURRENT_TOKEN
OP
このリクエストを受信すると、JWT 署名を検証し、ユーザーの自動承認を試みて、新しい JWT でリダイレクトする必要があります。
しばらくするとトークンが期限切れになります
ログインしたユーザーの JWT が期限切れになったとしましょう。いつ新しいものを要求する必要がありますか? 更新のトリガーは何ですか?
/tokeninfo
またはは何の/userinfo
ためにありますか?
私の理解では、JWT はユーザーを識別するために必要なすべてのデータを保存します。/tokeninfo
ただし、 orを呼び出す例を見てきました/userinfo
。
IDを既に持っている場合sub
、これらのエンドポイントはトークンを検証するためだけのものですか (サブジェクトの ID 以外は何も必要ないと仮定します)?
JWT署名検証
のほかに、JWT 署名を検証するOP
必要がありmy-spa
ますか (おそらく公開鍵を使用)?
このトークンを再利用して、3 番目のサービスの REST API にアクセスする
別の Web サービス API がhttp://my-service.com/api
あり、SPA から呼び出したユーザーを知る必要がある場合は、次の手順を実行する必要があります。
- をトークンとして各 ajax リクエストに
id_token
追加しますBearer
my-service.com
JWT署名を(公開鍵で?)検証し、保護されたリソースへのアクセスを許可するか拒否するかを決定する必要があります
どんな助けでも大歓迎です!