Une exigence courante dans le développement d'API Java est d'implémenter des fonctions d'authentification et d'autorisation des utilisateurs. Afin de fournir des services API plus sécurisés et plus fiables, la fonction d'autorisation est devenue particulièrement importante. Spring Security OAuth est un excellent framework open source qui peut nous aider à implémenter des fonctions d'autorisation dans les API Java. Cet article explique comment utiliser Spring Security OAuth pour une autorisation sécurisée.
Spring Security OAuth est une extension du framework Spring Security, qui peut nous aider à implémenter les fonctions d'authentification et d'autorisation OAuth.
OAuth est un standard ouvert permettant d'autoriser des applications tierces à accéder à des ressources. Cela peut nous aider à réaliser le découplage de la logique métier et à sécuriser les applications. Le processus d'autorisation OAuth comprend généralement les rôles suivants :
<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); } }
@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"); } }
@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(); } }
@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"); } } }
@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
Ensuite, nous obtenons le jeton d'accès en utilisant le modèle de mot de passe :
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'
Vous recevrez une réponse JSON contenant le jeton d'accès et le jeton d'actualisation :
{ "access_token":"...", "token_type":"bearer", "refresh_token":"...", "expires_in":3600, "scope":"read" }
Vous pouvez maintenant utiliser ce jeton d'accès pour accéder au service API :
curl -X GET http://localhost:8080/api/greeting -H 'authorization: Bearer xxx'
où xxx est votre jeton d'accès. Vous recevrez une réponse JSON contenant le message d'accueil « Hello, World ! ».
Dans cet article, nous expliquons comment utiliser Spring Security OAuth pour une autorisation sécurisée. Spring Security OAuth est un framework très puissant qui peut nous aider à mettre en œuvre tous les rôles dans le processus d'autorisation OAuth. Dans les applications pratiques, nous pouvons choisir différents modes d'autorisation et configurations de service en fonction de différentes exigences de sécurité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!