JavaアプリケーションにOAUTH2とOpenID Connectを実装します
OAUTH2は承認に使用され、OpenID Connect(OIDC)は、OAUTH2に基づいてID認証を提供してユーザーIDを確認します。 2。スプリングブートとスプリングセキュリティを使用することは、JavaにOIDCを実装するための推奨される方法であり、Spring-Boot-Starter-Oauth2-Client依存関係を導入する必要があります。 3.自動メタデータ発見を有効にするために、Application.ymlのIDP(Googleなど)のクライアントID、クライアントセクレット、スコープ(Googleなど)の発行者URIを構成します。 4. @enablewebsecurityを介してSecurityConfigを構成し、OAUTH2LOGINを有効にし、デフォルトの成功ページを設定します。 5. @authenticationPrincipalを使用してOAUTH2USERオブジェクトを取得し、そのプロパティから名前、電子メール、画像などのユーザー情報を抽出します。 6.複数のプロバイダー(GoogleやGitHubなど)をサポートする場合は、構成に複数のクライアントを登録し、対応するログインリンクを提供します。 7。Springは、IDトークンの署名、発行者、視聴者、有効期間を自動的に検証します。生産環境はHTTPSを使用する必要があり、敏感なトークンは暗号化されて保存する必要があります。 8。ユーザー情報マッピングと永続性は、カスタムOAuth2Userserviceを介して処理できます。概要:Spring Boot Configuration Driversを使用すると、基礎となるプロトコルロジックを記述せずにOIDCの迅速かつ安全な統合を可能にし、信頼できるIDプロバイダーによるユーザー認証を管理します。
JavaアプリケーションでOAUTH2とOpenID Connect(OIDC)を実装すると、特にGoogle、GitHub、OktaやAuth0などのエンタープライズソリューションなどのIDプロバイダーと統合する場合、ユーザー認証と承認を安全に処理できます。これを効果的に機能させるための実用的なガイドです。

1. OAUTH2とOpenID Connectの違いを理解します
コードに潜る前に:
- OAUTH2は承認用です。これにより、アプリはユーザーに代わってリソースへのアクセスを要求できます。
- OpenID Connect(OIDC)はOAUTH2の上に構築され、認証を追加します。ユーザーが誰であるかを確認し、ID情報(電子メール、名前など)を返します。
要するに、ユーザーをログインして自分が誰であるかを知る必要がある場合は、 OIDCを使用します。

2.適切なJavaフレームワークを選択します
JavaでOIDCを実装する最も簡単な方法は、Spring BootでSpring Securityを使用することです。 OAUTH2ログインとOIDCのサポートが組み込まれています。
依存関係(メイベン)
<依存関係> <GroupId> org.springframework.boot </groupId> <artifactid> spring-boot-starter-oauth2-client </artifactid> </依存関係> <依存関係> <GroupId> org.springframework.boot </groupId> <artifactid> spring-boot-starter-web </artifactid> </依存関係>
注:アプリが他のサービスからのアクセストークンも受け入れていない限り、
starter-oauth2-resource-server
必要ありません。
3.アプリケーションプロパティを構成します
application.yml
またはapplication.properties
でIDプロバイダー(IDP)を設定します。
例:GoogleをOIDCプロバイダーとして使用します
春: 安全: OAuth2: クライアント: 登録: グーグル: Client-ID:Your-Client-ID クライアントセクレット:クライアントセクレット 範囲:OpenID、プロフィール、電子メール Redirect-uri: "{baseurl}/login/oauth2/code/{registrationId}" プロバイダー: グーグル: Issuer-uri:https://accounts.google.com
-
client-id
およびclient-secret
:IDPからこれらを取得します(たとえば、Google Cloud Console)。 -
scope
:openid
OIDCを有効にします。profile
とemail
ユーザー情報を取得します。 -
issuer-uri
:Springはこれを使用して、OIDCメタデータ(JWK、承認エンドポイントなど)を自動表示します。
ヒント:OIDC(Auth0、Azure AD、Oktaなど)をサポートするプロバイダーを使用できます。発行者URIとクライアントの資格情報を調整するだけです。
4. Spring SecurityでOAUTH2ログインを有効にします
セキュリティ構成クラスを作成します。
@構成 @enablewebsecurity Public Class SecurityConfig { @bean Public SecurityFilterChain FilterChain(httpsecurity http)スロー例外{ http .authorizehttprequests(authz-> authz .RequestMatchers( "/"、 "/login **"、 "/error **")。pimitall() .anyrequest()。authentipted() )) .oauth2login(oauth2-> oauth2 .defaultsuccessurl( "/home") ); return http.build(); } }
これで、ユーザーがセキュリティで保護されたページにアクセスすると、Google(またはIDP)にリダイレクトされてログインします。
5。ログイン後にユーザー情報にアクセスします
認証されたら、 OAuth2User
からユーザーの詳細を取得できます。
サンプルコントローラー
@getMapping( "/home") パブリックストリングホーム(モデルモデル、@authenticationprincipal oauth2userプリンシパル){ if(プリンシパル!= null){ Model.Addattribute( "name"、spinital.getAttribute( "name")); Model.Addattribute( "email"、principal.getattribute( "email")); Model.Addattribute( "Picture"、spinital.getAttribute( "picture")); } 「家」を返します。 }
属性( name
、 email
など)は、プロバイダーに応じて、IDトークンおよび/またはuserInfoエンドポイントからのものです。
6。複数のプロバイダーの処理
複数のOIDCプロバイダー(Google、Github、Microsoftなど)をサポートできます。
春: 安全: OAuth2: クライアント: 登録: グーグル: Client-ID:... クライアントの秘密:... 範囲:OpenID、プロフィール、電子メール Github: Client-ID:... クライアントの秘密:... スコープ:ユーザー:電子メール authorization-grant-type:authorization_code client-authentication-method:client_secret_post
次に、ログインページで:
<a href = "/oauth2/authorization/google"> Googleにサインイン</a> <a href = "/oauth2/authorization/github"> github </a>でサインインします
Springはこれらのエンドポイントを自動的にセットアップします。
7。トークンの検証とセキュリティの考慮事項
- IDトークン検証:Spring Securityは
issuer-uri
を使用するときにJWT IDトークン(署名、発行者、視聴者、有効期限)を自動的に検証します。 - 生産にHTTPSを使用します- OIDCは安全な通信に依存しています。
- トークンをプレーンテキストに保管しないでください。トークンを更新する必要がある場合は、暗号化してください。
8。ユーザー処理のカスタマイズ(オプション)
OIDCのクレームをアプリのユーザーモデルにマッピングする必要がある場合は、 OAuth2UserService
を定義します。
@bean public oauth2userservice <oauth2userrequest、oauth2user> customoauth2userservice(){ return userrequest-> { oauth2userservice <oauth2userrequest、oauth2user> delegate = new defaultoauth2userservice(); oauth2user oauth2user = delegate.loduser(userrequest); //カスタムロジックを追加:ロールをマップし、ユーザーをDBに保存します。 新しいcustomoauth2user(oauth2user)を返します。 }; }
次に、ログインフローに配線します。
.oauth2login(oauth2-> oauth2 .userInfoendpoint(userinfo-> userInfo .userservice(customoauth2userservice()) )) ))
まとめ
JavaでOAUTH2とOpenID Connectを実装する(特にSpring Bootを使用)は簡単です。
- Spring Securityの
spring-boot-starter-oauth2-client
を使用します -
application.yml
を介してIDPを構成します - セキュリティ構成でOAUTH2ログインを有効にします
-
@AuthenticationPrincipal
経由でユーザー情報を取得します - オプションでユーザー処理をカスタマイズするか、複数のプロバイダーをサポートします
安全でスケーラブルで、パスワードの管理を妨げます。信頼できるIDプロバイダーが重い持ち上げを行わせます。
基本的に、Redirect URISをセットアップしてクライアント資格情報を取得すると、残りは構成駆動型であり、自分で低レベルのOIDCロジックを書く必要はありません。
以上がJavaアプリケーションにOAUTH2とOpenID Connectを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

HashMapは、Javaのハッシュテーブルを介してキーと値のペアストレージを実装し、そのコアはデータの位置をすばやく配置することにあります。 1.最初にキーのHashCode()メソッドを使用して、ハッシュ値を生成し、ビット操作を介して配列インデックスに変換します。 2。異なるオブジェクトは、同じハッシュ値を生成し、競合をもたらす場合があります。この時点で、ノードはリンクされたリストの形式で取り付けられています。 JDK8の後、リンクされたリストが長すぎ(デフォルトの長さ8)、効率を改善するために赤と黒の木に変換されます。 3.カスタムクラスをキーとして使用する場合、equals()およびhashcode()メソッドを書き直す必要があります。 4。ハッシュマップは容量を動的に拡大します。要素の数が容量を超え、負荷係数(デフォルト0.75)を掛けた場合、拡張して再ハッシュします。 5。ハッシュマップはスレッドセーフではなく、マルチスレッドでconcuを使用する必要があります

Javaのキャラクターエンコーディングの問題に対処するために、重要なのは、各ステップで使用されるエンコードを明確に指定することです。 1.テキストを読み書きするときは常にエンコードを指定し、inputstreamreaderとoutputStreamWriterを使用し、明示的な文字セットを渡して、システムのデフォルトエンコードに依存しないようにします。 2.ネットワーク境界で文字列を処理するときに両端が一貫していることを確認し、正しいコンテンツタイプのヘッダーを設定し、ライブラリでエンコードを明示的に指定します。 3. string.getBytes()およびNewString(byte [])を注意して使用し、プラットフォームの違いによって引き起こされるデータの破損を避けるために、常に手動でstardantcharsets.utf_8を指定します。要するに、

Javaでは、Defaultのデフォルトソートルールを内部的に定義するためにAcparableが使用され、コンパレータを使用して複数のソートロジックを外部から定義します。 1.Comparableは、クラス自体によって実装されるインターフェイスです。比較()メソッドを書き換えることにより、自然な順序を定義します。弦や整数など、固定および最も一般的に使用されるソートメソッドを備えたクラスに適しています。 2。Comparatorは、同じクラスに複数の並べ替え方法が必要な状況に適した、Compare()メソッドを介して実装された外部定義の機能インターフェイスであり、クラスソースコードを変更できない、またはソートロジックが変更されることが多い場合があります。 2つの違いは、比較可能がソートロジックを定義するだけで、クラス自体を変更する必要があることですが、比較して

Javaにはマップを通過する3つの一般的な方法があります。1。エントリセットを使用してキーと値を同時に取得します。これは、ほとんどのシナリオに適しています。 2。キーセットまたは値をそれぞれキーまたは値を通過する。 3. Java8のForeachを使用して、コード構造を簡素化します。 EntrySetは、すべてのキー値ペアを含むセットを返し、各ループはキーと値に頻繁にアクセスするのに適したMap.entryオブジェクトを取得します。キーまたは値のみが必要な場合は、それぞれkeyset()またはvalues()を呼び出すことができます。または、キーを横断するときにmap.get(key)を介して値を取得できます。 Java 8はForeachを使用できます((key、value) - &gt

Injava、thestatickeywordmeansameansmestotheclassit self、nottointances.staticvariablesaresharedacrossallinstancesは、Objedcreationを使用して、GlobalTrackingorconconstants.StaticMethododsodsodsoperateateClasslevel

tosetjava_homeonwindows、firstlocatethejdkinstallationpath(例:c:\ programfiles \ java \ jdk-17)、thencreateSystemenvironmentvaria blenamedjava_homewiththatpath.next、updatethepathvariablebyadding%java \ _home%\ bin、andverifythesetusingingingjava-versionandjavac-v

JDBCトランザクションを正しく処理するには、最初に自動コミットモードをオフにし、次に複数の操作を実行し、結果に応じて最終的にコミットまたはロールバックする必要があります。 1。CONN.SETAUTOCOMMIT(FALSE)を呼び出して、トランザクションを開始します。 2。挿入や更新など、複数のSQL操作を実行します。 3。すべての操作が成功した場合はconn.commit()を呼び出し、データの一貫性を確保するために例外が発生した場合はconn.rollback()を呼び出します。同時に、リソースを使用してリソースを管理し、例外を適切に処理し、接続を密接に接続するために、接続の漏れを避けるために使用する必要があります。さらに、接続プールを使用してセーブポイントを設定して部分的なロールバックを達成し、パフォーマンスを改善するためにトランザクションを可能な限り短く保つことをお勧めします。

仮想スレッドには、非常に並行したシナリオとIO集約型シナリオに大きなパフォーマンスの利点がありますが、テスト方法と適用可能なシナリオに注意を払う必要があります。 1.正しいテストでは、実際のビジネス、特にIOブロッキングシナリオをシミュレートし、JMHやガトリングなどのツールを使用してプラットフォームスレッドを比較する必要があります。 2。スループットのギャップは明らかであり、スケジューリングがより軽量で効率的であるため、100,000の同時リクエストよりも数倍から10倍高くなる可能性があります。 3。テスト中に、盲目的に高い並行性数を追求し、非ブロッキングIOモデルに適応し、レイテンシやGCなどの監視インジケーターに注意を払う必要があります。 4.実際のアプリケーションでは、Webバックエンド、非同期タスク処理、および多数の同時のIOシナリオに適していますが、CPU集約型タスクはプラットフォームスレッドまたはForkjoinpoolに依然として適しています。
