問題タブ [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.
spring - クライアント、認証サーバー、およびログアウト
だから、私はすべてSpring OAuth2を使用して、スタンドアロンのOAuth2認証サーバーとクライアントアプリ(Webベース)を持っています。
Springセットアップを使用して(ログインフォームを介して)クライアントアプリからリダイレクトなどを行うログインフォームホストがAuthサーバーにあります。
これまでのところすべて順調です。
クライアントにログアウト設定を追加しました。
それはすべて問題ないようです。
ただし、クライアントで「ログイン」リンクをクリックすると、認証アプリにリダイレクトされるときにログイン画面が表示されませんが、リダイレクトハンドシェイクが発生してクライアントアプリに戻ります。
それで、問題は、クライアントアプリでログアウトするときに認証サーバーで「クリア」する必要があるのは何ですか? どういうわけか、セッション情報は認証アプリに保持されていますが、ログインを押したときにそのセッションがどのように取得されているかわかりませんか? 「ログアウト」を認証サーバーに伝達するクリーンな方法はありますか?
どうもありがとう
マーティン
spring - プログラムで Spring OAuth 2.0 認可サーバーから認可コードを取得する
シンプルな CURL コマンドを使用して、Spring OAuth 2.0 認証サーバーから認証コードを取得しようとしています。
ただし、コードでリダイレクト URL を取得する代わりに、ログイン URL への 302 リダイレクト応答を取得しています。認証ヘッダーでユーザー名とパスワードを既に送信しているため、ログインページのリダイレクトをスキップして認証コードを直接取得する方法はありますか?
spring - Spring OAuth2 で確認ページを無効にする
この GitHub リンク で相互接続された 3 つのサンプル アプリのセットを分解することで、Spring OAuth2 を研究しています。アプリは私の devbox で意図したとおりに動作しますが、アプリは不要な確認ページを生成し、クライアントが保護された情報を受け取ることauthserver
を承認することを確認するようユーザーに求めます。localhost:8080/login
確認ページのスクリーンショットは次のとおりです。
authserver
確認手順を削除するには、アプリのコードに具体的にどのような変更を加える必要がありますか?
確認ページが特定のユースケースで役立つことを理解しています。しかし、確認ページは私が考えているユースケースには適していません。このステップを無効にするにはどうすればよいですか?
最初の試み:
認証ページのビュー コードを に見つけました。authorize.ftl
このリンクをクリックして読むことができます。しかしCtrl-H
、Eclipse ワークスペースで「authorize.ftl」を検索すると、結果が表示されません。同様に、Spring OAuth2 Developer Guideを確認しました。ガイドには、別の を作成することについて言及されているものもありますが、@RequestMappig("/oauth/authorize")
この確認手順を無効にする方法が明確ではないようです。
テンプレートlogin
ビューのコードは にlogin.ftl
あり、このリンクで読むことができます。
login.ftl
コードを新しいlogin.html
ファイルに単純に移動してから、そのビューを管理するソリューションはあり@RequestMappig("/oauth/authorize")
ますか?
上記の開発者ガイドのリンクからの作業を正しく解釈すると、
1.) @RequestMappig("/oauth/authorize")
GET にリンクされたメソッドがログイン ビューを提供し、次に別の@RequestMappig("/oauth/authorize")
,
2.) 次に@RequestMappig("/oauth/authorize")
、POST にリンクされた別のメソッドがビューから情報を取得し、確認手順をバイパスします。
しかし、これはコードでどのように見えるでしょうか? 私が正しく理解していれば、ここに出発点があります:
メソッドには何を入れますか?そして、私はビューコードを入れましたか?
開発者ガイドではWhiteLabelApprovalEndpoint,java
、GitHub のこのリンクから読むことができます。
spring - この `/error` エンドポイントをどのようにオーバーライドしますか?
私はGitHub でこの相互接続された 3 つのアプリのセットを分解することで Spring OAuth を研究していますが、このリンクの Spring OAuth 2 開発者ガイドも注意深く研究しています。 開発者ガイドには、/oauth/error
エンドポイントをカスタマイズする必要があると書かれていますが、オーバーライドを成功させるには、どの特定のコードを使用する必要があります/oauth/error
か?
最初の試み:
オーバーライドを行う最初の試みは、エラーをスローすることです。これは、このリンクでファイル共有サイトにアップロードしたデバッグ ログで確認できます。
まず、Spring が提供するコード要素をサンプル アプリで動作させることから始めました。
最初に、authserver
上記のサンプル アプリのリンクで新しいコントローラー クラスをアプリに追加し、Spring のサンプル コードの一部を追加しました。WhiteLabelErrorEndpoint.java
これは、このリンクで読むことができます。私の試みは次のとおりです。
そして、このリンクからコードをコピーして、SpelView.java
上記のリンクで使用される次の String ハンドラー クラスを追加しました。
oauth - 複数のリソース サーバー oauth2 クライアント? 春 OAuth2 SSO
良い一日、
SSO と API Gateway パターンを実装する実際の例をセットアップしました (ここで説明されているものと同様https://spring.io/guides/tutorials/spring-security-and-angular-js/#_the_api_gateway_pattern_angular_js_and_spring_security_part_iv )。
このシステムは、AUTH-SERVER、API-GATEWAY、SERVICE-DISCOVERY、RESOURCE/UI SERVER という個別のサーバー コンポーネントで構成されています。
API-GATEWAY (Spring Boot @EnableZuulProxy @EnableOAuth2Sso で実装) で、JWT を使用する独自の OAuth サーバーを含む複数の OAuth プロバイダーを構成しました。
Java 構成:
認証されていないリクエストがゲートウェイに送信されると、リクエストは期待どおりに AUTH-SERVER にリダイレクトされます。ここでは、AUTH-SERVER でサインインするオプションと、基本的にユーザーを取得するリンクを提供することによって上記で構成されたソーシャル オプションを提示します。上記で設定した関連する OAuth フィルタ パスによってインターセプトされる API-GATEWAY を戻します。JWT トークンを発行する AUTH-SERVER は期待どおりに機能し、リソース データと UI を提供しますが、たとえば、Google で正常に認証すると、リソース/UI サーバーから次の応答が返されます。
その後、これはリソース サーバーの OAuth 構成が原因である可能性があることに気付きましたか?
リソース サーバーは、外部 OAuth プロバイダーから送信されたトークンをデコードすることをどのように認識しますか? リソース サーバーで複数の OAuth2 クライアントを構成できますか? ここで私の考えは間違っていますか?
リソース サーバーへのリクエストをデバッグすると、org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter クラスで Google から送信されたトークン値を発見しました。
トークンにペイロードがないように見えますか?
また、使用されているベリファイアが上記で構成された jwt キー値を使用していることもわかりました。
複数のリソース サーバー oauth リソースを構成するにはどうすればよいですか? リソース サーバーはどのリソースを使用するかをどのように認識しますか?
spring - この TokenStore を自動配線する方法
このサンプル Spring Boot OAuth2 アプリの自動ログアウトをトリガーするにはどうすればよいですか?
この他の投稿への回答から、アプリdemo
のパッケージの新しいコントローラー クラスに次のコードを追加してみました。 authserver
autowire
しかし、アプリを起動しようとすると、デバッグ ログに次のエラーが表示され、トークンを保存 できないことが示されます。
コンパイル エラーが解決したら、上記の github リンクで アプリのhello.js
コントローラーにui
追加される次のコードからログアウト プロセスをトリガーする予定です。
autowire
サンプル アプリの完全なコードは上記の github リンクにあります。ユーザーをグローバルに正常にtoken store
自動ログアウトするには、具体的にどのような変更を加える必要がありますか?
継続的な取り組み:
@ManoJ の提案に従って、新しいコントローラー クラスを次のように変更しました。
ただし、次のように、端末でアプリを起動しようとすると、非常によく似たエラー メッセージが引き続き表示mvn spring-boot:run
されます。
このクラスがOP
上記の最初の行のリンクにあるサンプル アプリへの唯一の追加であることを考えると、アプリ全体のすべてのコードは、オンラインと独自の devbox の両方で利用できますgit clone ...
。では、TokenStore の autowire が適切に機能するためには、他に何を変更する必要があるのでしょうか?
spring - カスタム UserDetailsService を Spring Security OAuth2 アプリに追加する
UserDetailsService
以下のカスタムをこの Spring OAuth2 サンプルに追加するにはどうすればよいですか?
デフォルトのuser
デフォルトは、アプリ のファイルでpassword
定義されています。application.properties
authserver
ただし、テスト目的で アプリのパッケージにUserDetailsService
次のカスタムを追加したいと思います。demo
authserver
ご覧のとおり、これUserDetailsService
はautowired
まだであり、テスト目的でのみ設計されているため、意図的に安全でないパスワードを使用しています。
ユーザーがや と同じようにログインできるようにするには、GitHub サンプル アプリにどのような変更を加える必要がありますか? username=Samwise
password=TheShire
username=Frodo
password=MyRing
または他の場所に変更を加える必要がありAuthserverApplication.java
ますか?
提案:
Spring OAuth2 Developer Guideには、 a を使用して a をグローバルGlobalAuthenticationManagerConfigurer
に構成するように記載されています。UserDetailsService
ただし、これらの名前をグーグルで調べても、役立つ結果は得られません。
また、内部スプリング セキュリティ INSTEAD OF OAuth を使用する別のアプリは、次の構文を使用して を接続しUserDetailsService
ますが、その構文を現在の OP に調整する方法がわかりません。
次のように に接続するために の@Autowire
内部を使用してみました: OAuth2AuthorizationConfig
Users
AuthorizationServerEndpointsConfigurer
しかし、Spring Boot ログは、ユーザーSamwise
が見つからなかったことを示しています。これは、UserDetailsService
が正常に接続されなかったことを意味します。以下は、Spring Boot ログからの関連する抜粋です。
他に何を試すことができますか?