問題タブ [spring-security-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 - Spring Security OAuth2 簡易構成
次の単純な構成を必要とする単純なプロジェクトがあります。
- 「パスワード」grant_type があります。これは、ユーザー名/パスワード (ユーザーがログイン フォームに入力するもの) を送信し、成功時に access_token を取得できることを意味します。
- その access_token を使用して、API を要求し、ユーザーの情報を取得できます。
私は API の URI を知っています。巨大なものは必要ありません ( https://github.com/spring-projects/spring-security-oauth/tree/master/samplesで構成を見ました)。
私はそれを次のように考えることができます:
- *client_id* 、 *client_secret* 、 *grant_type=password* 、ユーザー名とパスワード(ユーザーが提供したもの) を指定して、単純な HTTP 要求を実行します。
- JSON 応答で *ACCESS_TOKEN* (およびその他のもの) を受け取ります。
- *ACCESS_TOKEN* を使用して (単純な GET 要求を使用して) URL を照会し、ユーザーの情報を提供します。
- HttpSession に情報を設定し、ユーザーがログインしていると見なします。
2 つの HTTP リクエストで実行できます。私はこのようにしたくありませんが、代わりにSpring Security OAuth2で「より安全な」方法を使用しています。
これを行うために必要な「単純な」構成を考えてもらえますか?
java - Spring oauth2 - Java ベースの構成によるユーザー ID のカスタム tokenEnhancer
私は安らかな API を実装し、リソース所有者のパスワード資格情報付与で春のセキュリティ oauth を使用します。APIでセッションを使用したくないので、ユーザーがAPIを呼び出すたびにデータベースからトークンをチェックします。
認証されたユーザーが API を呼び出す場合 (たとえば、URI GET /users を使用)、現在のユーザーから userId を取得して、ビジネス サービスを操作する必要があります。私のビジネス サービスは、userName ではなく userId を使用して動作し、現在のユーザー情報を取得したり、現在のユーザーが何らかの操作を実行できるかどうかを確認したりできます。
現時点では、ユーザー名をトークンとともに保存します(全体JdbcTokenStore
)。したがって、保存されているuserNameを使用して、毎回データベースからuserIdを取得できます。しかし、このソリューションは重すぎるため、サービスを使用する前に (トークンとユーザーのために) データベースに 2 回アクセスする必要があり、パフォーマンスが低下します。
したがって、この問題を解決するには、userId をトークンと共に保存します。このソリューションでは、データベースからトークンを取得すると、現在の userId があり、これを使用してサービスを直接呼び出すことができます。
問題は、カスタム トークン エンハンサーをデフォルトのトークン サービスに設定できないことです。
OAuth2ServerConfigurerAdapter を拡張する securityConfig での私の実装は次のとおりです。
カスタム トークン エンハンサーを追加するためのオーバーライドは次のtokenService()
とおりですが、機能しません。
そうでなければ、誰かがそれを行う考えを持っていますか?
spring - Spring Security OAuth2 (プロバイダー) でスコープをロールとして使用する
ユーザーが投稿を読み書きできる非常に単純な架空のアプリケーションを考えてみましょう。
記事を読み書きできるユーザーもいれば、読むことしかできないユーザーもいます。Spring Security (3.2.1) では、2 つのロールを持つことでこれをモデル化しました。
- ROLE_WRITE: この役割は、投稿を書くためのアクセス権をユーザーに付与します。
- ROLE_READ: このロールは、投稿を読むためのアクセス権をユーザーに付与します。
これをSpringセキュリティで実装するのはかなり簡単です...
ここで、 Spring Security OAuth (バージョン 2.0.0.M3 ATM)を使用して OAuth2 プロバイダーを実装することにより、サードパーティ アプリがユーザーに代わって投稿を読み書きできるようにしたいと考えています。
承認ステップで、アプリはユーザーに代わって投稿を読み書きする権限を付与するかどうかを尋ねます。ここのユーザーは、ここでスコープを付与しています (ロールではありません)。
次に、OAuth2 コンシューマーが REST API を呼び出すと、Spring Sec OAuth は付与されたトークンを承認し、すべてのロールと付与されたスコープのみを持つユーザーを含む認証を作成します。
問題 (および問題) は、API が通常認証されたユーザーによって呼び出されるか (ロールを確認するだけ)、または OAuth2 を介して呼び出されるか (ロール + スコープを確認する) に応じて、異なるセキュリティ ロジックを記述する必要があることです。
Spring Security OAuth2 のロールとスコープの概念を「マージ」して、承認ステップ中にユーザーがアプリにロールのサブセットを付与することは可能ですか (OAuth2 認証では、付与された権限でのみこれらを報告します) ? そのようにして、サードパーティのアプリが API 呼び出しを行うと、認証の役割が付与されますか? そうすれば、OAuth2 固有のセキュリティ ロジックを記述する必要がなくなります。
spring - OAuth2 では、パスワード以外の資格情報またはカスタム資格情報を使用した認証が許可されますか?
Spring Security OAuth2 を使用しています。クライアント アプリケーション (私たちが所有) は、ユーザーのユーザー名とパスワードを渡す "パスワード" 許可要求を作成します。ドラフトが指定するのと同じように。
カード番号、PIN、さらには許可を必要としない事前認証済みのパスワードなど、他の種類の資格情報もサポートするには、このメカニズムが必要です。
これらのリクエストは、私たちが所有するアプリケーションからのみ使用される特権 client_id によってのみ許可されることに注意してください。
oauth-2.0 - Spring セキュリティ oauth 2 とクライアント資格情報フロー
シンプルなクライアント資格情報フロー spring-security-oauth2 api を実装しようとしています。sparklr と tonr の例を適応させようとしましたが、成功しませんでした。また、このスレッドのコードに従ってみました: Spring-security context setup for 2-legged (client credentials) OAuth2 serverですが、うまくいかないようです。誰かが私に例を示したり、これを機能させるために私がしなければならないことを手伝ってくれませんか.
sparklr アプリケーションの spring-servlet.xml
tonr アプリケーションの spring-servlet.xml
sparklr アプリケーションで tonr アプリケーションを認証しようとすると、次のエラーが発生します。
HTTP ステータス 500 - リクエストの処理に失敗しました。ネストされた例外は error="access_denied", error_description="アクセス トークンのリクエスト中にエラーが発生しました。
誰かが私を助けてくれることを願っています。ありがとう
spring - Spring Security Oauth2 リソース所有者パスワード フロー: REST リクエストを送信すると、ユーザー詳細サービスは常にユーザー名ではなくクライアント ID を取得します
そのため、oauth サーバー (ヘッダーなし) にリクエストを送信しようとしています: grant_type=password&username=blah&password=blah&client_id=blahblah。
2 つの認証マネージャーがあります (1 つはクライアント用、もう 1 つはユーザー検証用です)。問題は、私の認証マネージャーのどれも、検証のためにユーザー名を渡していないことです。どちらの場合も、client_id で呼び出されています。私が欲しいのは、クライアントを検証するものと、ユーザーを検証するものです。
私のBean構成はこれです:
これは私の Web.XML です
私のユーザー詳細サービスクラス