Java API 開発における一般的な要件は、ユーザーの認証および認可機能を実装することです。より安全で信頼性の高いAPIサービスを提供するためには、特に認可機能が重要になっています。 Spring Security OAuth は、Java API での認可機能の実装に役立つ優れたオープンソース フレームワークです。この記事では、Spring Security OAuth を使用して安全な認証を行う方法を紹介します。
- Spring Security OAuth とは何ですか?
Spring Security OAuth は Spring Security フレームワークの拡張機能であり、OAuth 認証および認可機能の実装に役立ちます。
OAuth は、サードパーティ アプリケーションがリソースにアクセスすることを承認するためのオープン スタンダードです。これは、ビジネス ロジックの分離とアプリケーションの安全性を実現するのに役立ちます。 OAuth 承認プロセスには通常、次の役割が含まれます:
- ユーザー: リソースの所有者;
- クライアント: ユーザー リソースへのアクセスに適用されるアプリケーション;
- 認可サーバー: ユーザーの認可を処理するサーバー;
- リソースサーバー: ユーザーのリソースを格納するサーバー;
- 認可プロセス
Spring Security OAuth OAuth を実装します 認可プロセスの 4 つのエンドポイント:
- /oauth/authorize: 認可サーバーの認可エンドポイント;
- /oauth/token: 認可サーバーのトークン エンドポイント;
- /oauth/confirm_access: クライアントが承認を確認するためのエンドポイント;
- /oauth/error: 承認サーバーのエラー メッセージのエンドポイント;
Spring Security OAuth は、OAuth 2.0 の 4 つの側面を実装します 大規模認可モード:
- 認可コード モード: 使用シナリオは、アプリケーションの起動時にユーザー認可が必要であることです;
- パスワード モード: 使用シナリオは、クライアントがユーザー資格情報を独立して管理することです。
- 簡易モード: 使用シナリオは、クライアントがブラウザーで実行され、クライアントはユーザー資格情報を保護する必要がありません。
- クライアント モード: 使用シナリオでは、クライアントはユーザー認証を必要とせず、要求されたアクセス トークンはクライアント自体のみを表します;
- #Spring Security OAuth 依存関係を追加します
<dependency> <groupId>org.springframework.security.oauth</groupId> <artifactId>spring-security-oauth2</artifactId> <version>2.3.4.RELEASE</version> </dependency>
- 認可サーバーの構成
@Configuration @EnableAuthorizationServer public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter { @Autowired TokenStore tokenStore; @Autowired AuthenticationManager authenticationManager; @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { clients.inMemory() .withClient("client") .secret("{noop}secret") .authorizedGrantTypes("client_credentials", "password") .scopes("read", "write") .accessTokenValiditySeconds(3600) .refreshTokenValiditySeconds(7200); } @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { endpoints.tokenStore(tokenStore) .authenticationManager(authenticationManager); } }上記のコードでは、メモリベースのクライアント詳細サービスを定義し、認証タイプを client_credentials とパスワードとして構成し、アクセス トークンの有効期間とリフレッシュ トークンの有効期間も指定します。さらに、エンドポイントと、それに必要な tokenStore および authenticationManager を定義します。
- リソース サーバーの構成
@Configuration @EnableResourceServer public class ResourceServerConfig extends ResourceServerConfigurerAdapter { @Override public void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/api/**").authenticated() .anyRequest().permitAll(); } @Override public void configure(ResourceServerSecurityConfigurer config) throws Exception { config.resourceId("my_resource_id"); } }上記のコードでは、認証を与えるために /api/** を定義し、他のリクエストは匿名アクセスを許可します。また、後続の認可プロセスで使用するリソース ID「my_resource_id」も構成します。
- Web セキュリティの構成
@Configuration public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .withUser("user") .password("{noop}password") .roles("USER"); } @Override @Bean public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/oauth/**") .permitAll() .anyRequest() .authenticated() .and() .formLogin() .permitAll(); } }上記のコードでは、メモリベースのユーザー詳細サービスを定義し、認証を必要とするリクエストを宣言します (つまり、/oauth/** に続くすべてのパスは認証を必要とし、その他のパスは匿名でアクセスできます) 。また、ユーザーがアプリケーションにログインできるように、簡単なフォーム ログインも構成しました。
- UserDetailsService の実装
@Service public class UserDetailsServiceImpl implements UserDetailsService { @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { if ("user".equals(username)) { return new User("user", "{noop}password", AuthorityUtils.createAuthorityList("ROLE_USER")); } else { throw new UsernameNotFoundException("username not found"); } } }
- API の実装
@RestController @RequestMapping("/api") public class ApiController { @GetMapping("/greeting") public String getGreeting() { return "Hello, World!"; } }
- 認可プロセスのテスト
http://localhost:8080/oauth/authorize?response_type=code&client_id=client&redirect_uri=http://localhost:8080&scope=readブラウザで上記の URL にアクセスすると、認証のためのユーザー名とパスワードの入力を求められます。ユーザー名userとパスワードpasswordを入力して「認証」をクリックすると、http://localhost:8080/?code=xxxにリダイレクトされます。xxxは認証コードです。 次に、パスワード パターンを使用してアクセス トークンを取得します:
curl -X POST http://localhost:8080/oauth/token -H 'content-type: application/x-www-form-urlencoded' -d 'grant_type=password&username=user&password=password&client_id=client&client_secret=secret'アクセス トークンとリフレッシュ トークンを含む JSON 応答を受け取ります:
{ "access_token":"...", "token_type":"bearer", "refresh_token":"...", "expires_in":3600, "scope":"read" }これで、次のことが可能になります。このアクセス トークンを使用して API サービスにアクセスします:
curl -X GET http://localhost:8080/api/greeting -H 'authorization: Bearer xxx'ここで、xxx はアクセス トークンです。 「Hello, World!」という挨拶を含む JSON 応答を受け取ります。
この記事では、Spring Security OAuth を使用して安全な認証を行う方法を紹介します。 Spring Security OAuth は、OAuth 認証プロセスにおけるすべてのロールの実装に役立つ非常に強力なフレームワークです。実際のアプリケーションでは、さまざまなセキュリティ要件に応じて、さまざまな認証モードとサービス構成を選択できます。
以上がJava API開発における安全な認可のためのSpring Security OAuthの使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。
