インターネットの継続的な発展に伴い、分散アーキテクチャを使用して開発されるアプリケーションがますます増えています。分散アーキテクチャでは、認証は最も重要なセキュリティ問題の 1 つです。この問題を解決するために、開発者は通常、OAuth2 認証を実装します。 Spring Security OAuth2 は、OAuth2 認証に一般的に使用されるセキュリティ フレームワークであり、Java API 開発に非常に適しています。この記事では、Java API開発における認証にSpring Security OAuth2を使用する方法を紹介します。
Spring Security OAuth (以下、SS OAuth) は Spring Security の拡張モジュールであり、以下を目的として設計された Core モジュールとなっています。 OAuth2 認証を Spring アプリケーションに統合するためのサポートを提供します。 OAuth2 認証エンドポイント (/oauth/token、/oauth/authorize など) を提供し、複数の認証方法 (認可コード、パスワード、クライアント資格情報など) をサポートするほか、JWT およびエンドポイント セキュリティもサポートします。
Spring Security OAuth2 は主に以下のコンポーネントで構成されます。
(1)認可サーバー:
OAuth2 プロトコルのコア関連機能を提供し、トークンの発行、認可、リフレッシュ、その他の操作を管理します。これは主に、クライアント登録センター、認可リクエスト プロセッサ、トークン マネージャー、ユーザー認証システムの 4 つのコンポーネントで構成されます。
(2) リソース サーバー:
リソース アクセスのセキュリティ保証を提供し、インターフェイス インターフェイスのアクセス制御を実装します。リソース サーバーは、リクエストが正当なものであることを確認するために、渡されたアクセス トークンを検証する必要があります。一般に、認可サーバーはリソース サーバーとして直接使用することもできます。
(3) クライアント:
クライアントは OAuth2 プロトコルのアプリケーションであり、クライアントは認可サーバーからトークンを取得します。トークンは、保護されたリソース サーバーにアクセスするために使用されます。
Spring Security OAuth2 の基本的な構成例を次に示します。
@Configuration @EnableAuthorizationServer public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter { @Autowired private AuthenticationManager authenticationManager; @Autowired private UserDetailsService userDetailsService; @Autowired private DataSource dataSource; @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { clients.jdbc(dataSource); } @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { endpoints.authenticationManager(authenticationManager) .accessTokenConverter(accessTokenConverter()) .userDetailsService(userDetailsService); } @Bean public JwtAccessTokenConverter accessTokenConverter() { JwtAccessTokenConverter converter = new JwtAccessTokenConverter(); converter.setSigningKey("my-jwt-key"); return converter; } @Override public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception { oauthServer.tokenKeyAccess("permitAll()").checkTokenAccess("isAuthenticated()"); }
上記の構成コードでは、まず、モジュールのアノテーション @EnableAuthorizationServer
は、認可サーバーを有効にする機能をマークするために使用されます。次に、AuthorizationServerConfigurer インターフェイスを実装しました。このインターフェイスでは、configure(ClientDetailsServiceConfigurer clientes)
メソッドを書き換えて、クライアント詳細サービス (クライアント ID、キー、認証メカニズムなどのクライアント ライブラリ情報) を構成できます。 configure(AuthorizationServerEndpointsConfigurer endpoints)
メソッドでは、認可 URL とトークン URL を構成し、OAuth2AccessToken オブジェクトを構築しました。構成オブジェクトには、認証マネージャーやトークン ストレージ インターセプターなどの関連情報が含まれています。次に、トークン署名ミドルウェアで JWT を生成し、JwtAccessTokenConverter Bean オブジェクトを使用してクライアントに返します。最後に、configure(AuthorizationServerSecurityConfigurer security)
メソッドで、対応する OAuth2 サービスとリソース サーバーのセキュリティ アクセス ルールを定義します。
上記の SS OAuth 構成を完了したら、OAuth2 認証の使用を開始できます。認可サーバーからトークンを取得する必要がある場合は、認可 URL に対してリクエストを行う必要があり、そのリクエストにはクライアント ID とシークレットが含まれている必要があります。リクエストが承認されると、承認サーバーはアクセス トークン (access_token) をクライアントに返し、クライアントはそのトークンを使用して、保護されたリソース サーバーのリソースにアクセスできます。 Spring Security OAuth2では、RestTemplateまたはFeignを使用してトークンリクエストを作成し、リクエスト内の認証にBasic認証を使用できます。
この記事では、Java API 開発における認証に Spring Security OAuth2 を使用する方法を、SS OAuth の基本コンポーネント、その構成方法、使用方法などを含めて紹介します。この記事の導入により、Spring Security OAuth2 の使用方法をより深く理解できると同時に、分散アプリケーションのセキュリティをより適切に保護することができます。
以上がJava API開発における認証にSpring Security OAuth2を使用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。