OAuth2 は、最新のアプリケーションで広く使用されている認証および認可プロトコルの 1 つです。これにより、ユーザーは機密情報の漏洩を防ぎながら、サードパーティのアプリケーションがリソースにアクセスすることを承認できます。この記事では、Java バックエンド開発を使用して OAuth2 ベースの安全な API を構築する方法を紹介します。
OAuth2 は、アプリケーション間の認可の問題を解決するために設計された一般的な認可プロトコルです。これにより、ユーザーはサードパーティのアプリケーションが Google ドライブや Facebook アカウントなどのリソースにアクセスすることを承認しながら、ユーザーの資格情報が侵害されるのを防ぐことができます。 OAuth2 には、リソース オーナー、クライアント、認可サーバー、リソース サーバーの 4 つの役割が含まれています。リソース所有者は、保護されたリソースを持つユーザーまたはエンティティです。クライアントは、リソースへのアクセスを要求するアプリケーションです。認可サーバーは、リソース所有者の身元を確認し、アクセス トークンを発行するサーバーです。リソース サーバーは、リソースを保存および提供するサーバー。 OAuth2 は認可サーバーを通じてトークンを発行し、クライアントはそのトークンを使用してリソース サーバーにリソースを要求します。
OAuth2 プロセスは次のステップで構成されます。
安全な API を構築するには、次の手順を実装する必要があります。
次は、Java および Spring フレームワークに基づく OAuth2 の例です:
@EnableAuthorizationServer
@Configuration
public class OAuth2AuthorizationConfig extends AuthorizationServerConfigurerAdapter {
private final PasswordEncoder passwordEncoder; private final AuthenticationManager authenticationManager; private final UserDetailsService userDetailsService; @Autowired public OAuth2AuthorizationConfig( PasswordEncoder passwordEncoder, AuthenticationManager authenticationManager, UserDetailsService userDetailsService ) { this.passwordEncoder = passwordEncoder; this.authenticationManager = authenticationManager; this.userDetailsService = userDetailsService; } @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { clients.inMemory() .withClient("client") .secret(passwordEncoder.encode("secret")) .authorizedGrantTypes("authorization_code") .scopes("read", "write", "trust") .redirectUris("http://localhost:8080/login/oauth2/code/"); } @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { endpoints.authenticationManager(authenticationManager) .userDetailsService(userDetailsService); }
}
@Configuration
@EnableWebSecurity
@ EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
private final UserDetailsService userDetailsService; private final PasswordEncoder passwordEncoder; @Autowired public WebSecurityConfig( UserDetailsService userDetailsService, PasswordEncoder passwordEncoder ) { this.userDetailsService = userDetailsService; this.passwordEncoder = passwordEncoder; } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService) .passwordEncoder(passwordEncoder); } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/oauth/**").permitAll() .anyRequest().authenticated() .and() .oauth2Login(); }
}
@RestController
public class ClientController {
private final OAuth2AuthorizedClientService authorizedClientService; @Autowired public ClientController(OAuth2AuthorizedClientService authorizedClientService) { this.authorizedClientService = authorizedClientService; } @GetMapping("/resource") public ResponseEntity<String> getResource(OAuth2AuthenticationToken authentication) { OAuth2AuthorizedClient authorizedClient = authorizedClientService.loadAuthorizedClient( authentication.getAuthorizedClientRegistrationId(), authentication.getName() ); HttpHeaders headers = new HttpHeaders(); headers.setBearerAuth(authorizedClient.getAccessToken().getTokenValue()); HttpEntity<String> entity = new HttpEntity<>(headers); ResponseEntity<String> response = new RestTemplate().exchange( "http://localhost:8081/resource", HttpMethod.GET, entity, String.class ); return response; }
}
@RestController
public class ResourceController {
@GetMapping("/resource") public ResponseEntity<String> getResource() { return ResponseEntity.ok("resource"); }
}
@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
@Override public void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/oauth/**").permitAll() .anyRequest().authenticated() .and() .oauth2ResourceServer() .jwt(); }
}
この記事では、OAuth2 プロトコルのプロセスを紹介し、Java および Spring フレームワークに基づく例を示します。 OAuth2 を使用することで、より安全な API を構築し、ユーザーの機密情報の漏洩を防ぐことができます。 API開発では、ユーザーデータとアプリケーションリソースを保護するために、常にセキュリティに注意を払う必要があります。
以上がJava バックエンド開発: OAuth2 に基づいた安全な API の構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。