6

ユーザー名とパスワードの許可を使用して、JS クライアントを REST サーバーに接続します。ある意味では、oauth/token によって返されるトークンは私たちのセッションであり、限られた時間だけバックエンドへのアクセスを許可します。

トークンを使用してバックエンドにリクエストを行うたびに、そのセッション/トークンを更新したいと考えています。

サーバーによって発行されたこの更新トークンがあることを知っており、期限切れになった後、それを使用してトークンを更新できます。

問題は、トークンの有効期限が切れた例外をキャッチし、トークンの有効期限が切れる前に再認証または更新をスケジュールすることをクライアントの責任にしたくないということです。セッションのように、トークンが限られた時間使用されなくなるまで、トークンをリフレッシュしたい。(また、すべての「データ」リクエストでリフレッシュリクエストを発行したくありませんが、読んだことは覚えていると思いますが、リフレッシュトークンは一度しか有効ではありません..?!)

春のセキュリティでそれを行う方法はありますか、それともトークンストアまたは選択した部分のカスタム実装を構築する必要がありますか?

私は本当に答えを見つけることができないので(したがって投稿)、考えています:理由はわかりませんが、これを行うのは賢明ではないかもしれません。トークンを盗むことができれば、リフレッシュ トークンも盗むことができます。ですから、そもそもリフレッシュトークンを持つ意味がよくわからないと思います..

編集

Luke Taylor の回答に応えて、ユースケースを明確にします。

  • 人のようなアプリケーション データを保持する REST サーバーがあります。また、コンテンツ管理へのアクセスを提供し、クライアントが Facebook に投稿できるようにします。アプリケーションロジックとデータストレージをカプセル化します
  • 独自のセキュリティ レイヤーを備え、クライアント資格情報フローを介して REST サーバー上のデータにアクセスするだけの本格的なクライアント アプリケーションが既に配置されています。クライアントサイドで決めたことを誰ができるか
  • Facebook の連絡先アプリのように、クライアント資格情報を使用して REST サーバー上のデータにアクセスする中小規模のアプリケーションがいくつかあります。
  • 現在、大きなクライアント アプリケーションが行うすべてのことを行うために REST レイヤーにアクセスする JavaScript のみを使用してクライアント アプリケーションを開発していますが、個々のユーザーを認証し、マルチテナントを許可する手段も提供する必要があります。したがって、この新しいクライアント アプリケーションは、ユーザー名とパスワードの許可を使用して認証し、メソッド レベルのセキュリティを使用してユーザーを承認します。

そのため、独自のセキュリティ機能を実行する信頼できるアプリケーションへの完全なアクセスを提供する必要がある REST サーバーがあり、同じサーバーが新しいマルチテナント JavaScript クライアント アプリケーションのユーザーにアクセスを提供する必要があります。本番環境では、それぞれ独自のデータベースを持つ複数の REST サーバーがありますが、コアは常に同じであるため、理論的には 1 つのサーバーですべてを処理できるはずです。

4

1 に答える 1

2

セッションのように、限られた時間使用されなくなるまで、トークンを更新したい

これは (OAuth2 コンテキストでは) あまり意味がありません。アクセス トークンは承認サーバーによって発行され、承認サーバーによって有効期間が決定されます。これは、認可サーバーとは完全に分離されている可能性があるリソース サーバーで「使用」されるため、OAuth2 には使用をトークンの有効期間に関連付ける機能はありません。理論的には、これを機能させる何かを一緒にハックすることは可能ですが、それは悪い考えのように思えます。

トークンを盗むことができれば、リフレッシュ トークンも盗むことができます。ですから、そもそもリフレッシュトークンを持つ意味がよくわからないと思います..

アクセス トークンは繰り返し使用され、クライアントによって認可サーバー以外のサーバーに送信されます。リフレッシュ トークンはクライアントによって保持され、認可サーバーにのみ送り返されます。クライアントは、更新トークンを正常に使用するためにも認証する必要があるため、クライアント ID とシークレットも危険にさらされる必要があります。

あなたの質問から、なぜ OAuth2 を使用しているのかは明確ではありません。これを明確にするために、おそらく質問を拡大する必要があります。クライアントが 1 つと REST サーバーが 1 つしかない場合、HTTPS 経由の BASIC 認証などを使用しないのはなぜでしょうか?

また、クライアントはブラウザベースのアプリですか? その場合、ユーザー名/パスワードの許可は、信頼できないクライアントでの使用にはあまり適していません。

于 2013-09-27T12:26:59.147 に答える