Single-Page App(SPA)とRESTful APIを構築しています。 APIにはセキュリティが必要です。特定のユーザーは特定のエンドポイントへの呼び出ししか行えません。 OpenId Connectプロトコルを使用してユーザーに認証させる外部IDプロバイダー(IdP(Okta))があります。 RESTful APIへのSPAの認証と承認の正しい手順を明確にしようとしています。私が見てきた2つのフローは、承認コードフローと暗黙フローです。
Implicit flowを使用する場合、手順は次のようになります。
Authorization Code flowを使用する場合、手順は次のようになります。
このシナリオで使用するのは暗黙のフローですが、手順は正しいですか?特にステップ3では、すべてのリクエストで2つのトークンを送信することは正しくないようです。しかし、ユーザーを検証して決定するには、両方のトークンが必要だと思います。感謝します!
暗黙的フローとAuthCodeフローの違いは次のとおりです。
注:2019年4月現在、Oauthワーキンググループ 推奨されなくなりました ほとんどの場合、暗黙的なフローの使用があるため、 より良い、より安全な方法 同じことを達成します。
localStorage
に保存し、アクセストークンをREST APIに送信しますリクエストごとにサーバー(通常はAuthorization: Bearer <access token>
ヘッダーとして)。login
エンドポイントに送信します。ここから、AuthCodeフローはImplicitフローよりもはるかに複雑ですが、アクセストークンがユーザーのコントロールに格納されないという利点があります。
ただし、この場合のトークンの保存の主な目的は、独自の認証ではなく、REST APIサーバーがGoogle、Facebookなどの他のサービスと通信する必要がある場合です。 Twitterなど.
自分のログインにOpenID Connectのみを使用している場合REST APIサーバー、ただしサーバー自体が認証情報を使用する必要がないため、暗黙的に実装フローは大幅に簡単になり、AuthCodeフローを実装しても実際には何も得られません。