問題タブ [spring-oauth2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - TokenEndpoint : Null ポインター例外の処理
curl でこのコマンドを実行して、oauth2 サーバーからコードを要求しようとしました
応答は
ログを確認すると、このエラーが発生しました。
私の構成の要点
java - Spring はどのようにして新しい _csrf トークンをセッション変数に追加できますか?
誰かがSpring OAuth2 (このリンクの API のソース コードPOST
) でtoを実行すると、サーバーで CSRF トークンが更新されます。 /oauth/authorize
1.) 新たに作成された CSRF トークンにコードでアクセスしますか?
2.) 新しく作成された CSRF トークンのコピーを不活性セッション変数に割り当てますか?
3.) その後、別のクラスで使用するために新しいセッション変数を取得しますか?
この要件のコンテキストは、ユーザーが/oauth/authorize
エンドポイントを介して多数のパスを作成している間に、複数のフィルターとコントローラーを介した可変ルーティングを含む制御フローです。変数は、セッション スコープに保存してから、セッション スコープから取得し、アルゴリズムの必要に応じてリクエスト スコープに戻す必要があります。
上記のセッション変数を作成および使用する必要がある可能性のあるクラスのタイプの例には、次のものがあります。
1.) を持つ任意のクラス@Controller annotation
、
2.) OncePerRequestFilterの任意のカスタム実装、
3.) の任意のカスタム実装DefaultOAuth2RequestFactory
、
4.) カスタム フィルタ チェーンで使用されるその他のタイプのクラス。
これは、Spring MVC と Spring Security からソース コードが構築された Spring OAuth2 API に関係していても、Spring MVC の質問または Spring Security の質問、またはその両方である可能性があります。
java - Spring OAuth2で状態はどのようにエンコードまたは暗号化されますか?
Spring OAuth2state
のトークンに関連するパラメーターは具体的にどの程度ですか? _csrf
state
の暗号化されたバージョン_csrf
は期待どおりですか ?
また、 Spring OAuth2 で_csrf
新しいパラメーターにカプセル化する前に、新しい値をエンコードおよび暗号化するために使用する特定の Java 構文は何ですか?state
**コンテキスト:**
クライアント アプリは、ユーザーの Web ブラウザーをクライアント アプリから承認サーバーの認証サーバー/ログイン ページにリダイレクトします。次に、認可サーバー アプリで、 のカスタム実装をOncePerRequestFilter
使用して へのリクエストを/oauth/authorize?(list of params)
追加の認証ステップにリダイレクトし、最終的に への新しいリクエストにリダイレクトし/oauth/authorize?(list of params)
ます。問題は、追加の認証手順中に_csrf
トークンが変更されることです。ドキュメントには、それがパラメーター_csrf
として使用されることがstate
示されています。これは、新しい値state
を反映するために、おそらく認可サーバーによって値を更新する必要が_csrf
あることを意味します。
**「状態」の生成方法:**
問題は、クライアント アプリが「OAuth2ClientAuthenticationProcessingFilter」を使用して認証サーバーが使用する情報を転送し、上記の認証手順でユーザーを認証する 前に、「状態」のエンコードおよび暗号化された値がクライアント アプリによって既に設定されていることです。一部の調査では、「state」キーは「DefaultStateKeyGenerator」を使用してクライアントによって生成され、次に「RandomValueStringGenrator」を使用して 6 文字の状態値を生成することが示されています。
たとえば、 に対して行われた元のリクエストで/oauth/authorize?(list of params)
_csrf
fupS1L
は、次の URL に示すように、生の値が にエンコードされます。
リダイレクト フロー中に_csrf
値が に変更された場合、状態パラメーターの値は無効になり、結果のトークンは保護されたリソースへのアクセスを許可するように承認されません。a69fd23a-a393-4b27-a685-a323fd31db9a
fupS1L
新しい値を、関数パラメーターに渡すことができるのと_csrf
同様の暗号化された値に変換するために、どの特定の構文を使用しますか?fupS1L
state
また、state
変数と_csrf
トークンの間に関係はありますか? RandomValueStringGenerator
used byDefaultStateKeyGenerator
は、ランダムな 6 文字の文字列を作成するだけのようです。コードを深く扱った、またはコードを書いた人からの信頼できる回答が欲しいです。私はコードの詳細なレビューを行っているため、RandomValueStringGenerator
ソース コードを読んで、状態はトークンに関連していないと言うカジュアルな通行人はcsrf
、何の価値も追加しないでしょう。ただし、API の作成者は、これがどのように機能するかを教えてくれるので、私たちを大いに助けてくれます。
**春への注意:**
このような単純なことのドキュメントを見つけるために、これほど掘り下げる必要はないはずです。
spring - Spring oAuth2 のユーザーベースのパーミッション/スコープ
私の現在の設定では、スタンドアロンのSpring oAuth2サーバー、スタンドアロンのリソースサーバー、およびリバースプロキシを備えたangularJsアプリがあります。
認証サーバー側では、2 つのクライアント (サービス通信用の Web アプリと内部クライアント) を登録しました。クライアント スコープとユーザー ロールを正しく受け取ります。
質問 1 クライアント (Web アプリ、モバイルなど) ではなく、ユーザーごとに異なる権限 (スコープなど) が必要です
各ユーザーの ClientDetails を作成する独自の ClientsDetailService を提供しようとしましたが、受け取るのはクライアント ID (「web-app」) だけで、どのユーザーがログインしているかを知る方法がありません。
ユーザーコンテキストを挿入する方法はありますか?
関連するスタックの質問
質問 2利用可能なすべてのアクセス許可を JWT に配置し、リソース サーバーで "hasPermission(...)" ロジックを実行すると、この問題を回避できます。基本的に、クライアント アプリは N スコープで動作し、Users ロールに基づいてサーバーがアクセス許可のリストを構築し、JWT を作成します。しかし...
- ユーザーのアクセス許可を削除するとどうなりますか? JWT は無効化されていますか?
- このシナリオの oAuth ワークフローは何ですか? (refresh_token は更新されたアクセス許可を取得しますか、それともユーザーは資格情報を再度入力する必要がありますか?)
- これは悪い習慣のように思えるので、より良い解決策はありますか?
質問 3 spring oauth2 でより詳細な許可ロジックを実装する標準的な方法はありますか? (メソッド レベルのセキュリティで 100 以上の異なるアクセス許可があると考えてください)