2016-09-12 7 views
0

spring-angular2(spring to new)アプリケーションを構築しようとしています。セキュリティモデルとしてOAuth2を選択します。私の新しいアプリケーションには3つの部分があります。認証サーバー、バックエンドサーバー、フロントエンド(角2)。現在、私はOAuth2を認証目的のためだけに使用しています。Spring OAuth2アーキテクチャに関する提案

私の現在の設計では、私のサーバー(ビジネス層)は認証用の認証サーバー(authorization_codeベース)と通信し、OAuth2トークン(短命のアクセストークン、トークン)。私の意図は、このリフレッシュトークンを使用して、アクセストークンを期限まで必要なときに生成し、その後、ログインのために認証サーバーにリダイレクトすることです。すべてのトークン管理はサーバーで処理され、フロントエンドはこれについて何も知りません。

私のアプリケーションを実行すると、まずangle2アプリが読み込まれ、保護されたURLにアクセスしようとします(認証チェック)。サーバーが401エラーを返すと、angleはWebページをログイン用の認証サーバーにリダイレクトさせます。バックエンドサーバーはセキュリティを処理するためにセッションを使用します(デフォルトのoauth2client設定)。ここでの問題は、アイドル状態のためにセッションが期限切れになる(デフォルトの30分)と、リフレッシュトークン(有効期限10日)を使用できなくなり、春のセキュリティがWebページをログイン用の認証サーバーにリダイレクトします。

セッションの有効期間を10日間に延長するのは良い考えではないと思います。だから、私は設計からセッションを避け、ユーザーモデル(db)にトークンを格納し、このトークンにアクセスしてフィルターを使用して認証オブジェクトを作成するために使用されるブラウザに一意のIDを送信することを計画しています。 AngularはこのIDをlocalstorageに保存し、すべてのリクエストヘッダーを送信します。

この質問に入力を追加する必要があるかどうかを教えてください。

私は、このアーキテクチャが良いかどうか)

1であなたのアドバイスが必要?これを改善するための提案はありますか?

2)セッションアイドルタイムアウトを気にせずにリフレッシュトークンを処理できますか?

3)私がセッションレスになると、ブラウザ(angular2)に一意のIDを伝えるべきであるとどのように示唆していますか?私はクッキーも避けたい。 URLのクエリ文字列は、この設定で角度アプリにこのユニークな値を渡す唯一の方法ですか?

答えて

0

Springとは関係ありませんが、OAuthアプリケーションの場合、アクセストークンはベアラトークンであるため、サーバー側は必須ではありません。しかし、あなたのケースでは、リフレッシュトークンの制限を25分にすることができると思いますので、セッションがアイドル状態になる前に新しいトークンを取得しますが、ここでもう一度(正しく理解すれば)問題は、ユーザーは依然として認証のためにリダイレクトされます。

論理的に、リソースサーバーには、トークンを自分自身かAuthzサーバーかを検証し、アクセスを許可するフィルターが必要です。サーバー側でセッション管理なし。また、ログアウトのシナリオも考慮してください。

+0

今後、同じAuthサーバーを使用する他のアプリケーションを開発する予定です。私は最初の認証とアクセストークンの更新のために認証サーバーを使用します。 –

+0

また、短いリビングリフレッシュトークンは、アクティブなユーザーが頻繁にログイン画面にリダイレクトされることを意味します。この場合、私は避けようとしています。 –

+0

これはOAuth2の理由で、サーバー側のセッションは必要ありません。 OAuthトークンは、CookieベースのSMEと同じようにセッションを表します。 – dvsakgec

関連する問題