2016-12-31 6 views
0

私は(セットの)Webアプリケーションを構築しています。バックエンドにはRESTのようなAPIがあり、フロントエンドにはいくつかのREST JSアプリ、アンドロイドアプリなどがあります。私はSSOの機能性を考え出しています。Oauth SSO for RESTアプリケーション

Oauth2/OIDCを見ると、暗黙のフローを使用するのが最善の方法です。ただし、暗黙のフロー(oidc)のアクセストークンには有効期限が設定されています。リフレッシュトークンは、暗黙のフローの一部ではありません。

ユーザーのログインを確実にするにはどうすればよいですか?私。アクセストークンが期限切れになると、フロントエンドアプリケーションは認証サーバーから新しいトークンを取得しようとします。それはユーザー名/パスワードを尋ねるはずです。あるいは、フロントエンドとのセッションを(クッキーを使用して)構築することができますが、リフレッシュトークンとはどのように違いますか?

アクセストークンを取得していると思われます。アンドロイドアプリから少なくともウェブブラウザを開くことを意味する。有効期限に応じて、それはかなり頻繁に起こる可能性があります。それは正しい流れですか、何かが欠けていますか?

答えて

0

あなたが正しいです、リフレッシュトークンの発行は、暗黙の付与タイプでは許可されていません。 ただし、ユーザーがログインしているかどうかを知るには、リフレッシュトークンとアクセストークンは必要ありません(アクセストークンでは、保護されたリソースにのみアクセスできます)。承認応答で発行されたIDトークンを使用する必要があります。

クエリパラメータprompt=none(セクション3.1.2.1. Authentication Requestを参照)を使用して承認リクエストを送信して、ユーザがまだログインしているかどうかを確認できます。以前に認証サーバによって発行された

IDトークンは、エンドユーザーの現在または過去の認証されたセッションについてのヒントとして渡される:私は、同じセクションで説明したように、あなたがid_token_hintクエリパラメータを使用して、現在のIDトークンを送信することをお勧めしますクライアントとIDトークンによって識別されたエンドユーザーがログインしているか、要求によってログインしている場合、認証サーバーは肯定応答を返します。さもなければ、それはlogin_requiredのようなエラーを返すべきです(SHOULD)。可能な場合はプロンプト=どれもエラー(login_required又はinteraction_required)を受信した場合、ユーザがログアウトしてもよい

を使用しない場合、id_token_hintが存在すべきです。

もう1つの方法は、Session Management機能を使用することです。しかし、この仕様がまだ承認されていない(ドラフト27)ため、変更される可能性があり、利用できない可能性があります。しかし、それはユーザーの状態を知る非常に簡単な方法です。