Eine häufige Anforderung bei der Java-API-Entwicklung ist die Implementierung von Benutzerauthentifizierungs- und Autorisierungsfunktionen. Um sicherere und zuverlässigere API-Dienste bereitzustellen, ist die Autorisierungsfunktion besonders wichtig geworden. Spring Security OAuth ist ein hervorragendes Open-Source-Framework, das uns bei der Implementierung von Autorisierungsfunktionen in Java-APIs helfen kann. In diesem Artikel wird erläutert, wie Sie Spring Security OAuth für die sichere Autorisierung verwenden.
Spring Security OAuth ist eine Erweiterung des Spring Security-Frameworks, die uns bei der Implementierung von OAuth-Authentifizierungs- und Autorisierungsfunktionen helfen kann.
OAuth ist ein offener Standard zur Autorisierung von Drittanbieteranwendungen für den Zugriff auf Ressourcen. Es kann uns helfen, die Entkopplung der Geschäftslogik und sichere Anwendungen zu erreichen. Der OAuth-Autorisierungsprozess umfasst normalerweise die folgenden Rollen:
<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
Als nächstes erhalten wir das Zugriffstoken mit dem Passwortmuster:
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'
Sie erhalten eine JSON-Antwort mit dem Zugriffstoken und dem Aktualisierungstoken:
{ "access_token":"...", "token_type":"bearer", "refresh_token":"...", "expires_in":3600, "scope":"read" }
Jetzt können Sie dieses Zugriffstoken verwenden, um auf den API-Dienst zuzugreifen:
curl -X GET http://localhost:8080/api/greeting -H 'authorization: Bearer xxx'
Dabei ist xxx Ihr Zugriffstoken. Sie erhalten eine JSON-Antwort mit der Begrüßung „Hello, World!“.
In diesem Artikel stellen wir vor, wie Sie Spring Security OAuth für die sichere Autorisierung verwenden. Spring Security OAuth ist ein sehr leistungsfähiges Framework, das uns bei der Implementierung aller Rollen im OAuth-Autorisierungsprozess helfen kann. In praktischen Anwendungen können wir je nach Sicherheitsanforderungen unterschiedliche Autorisierungsmodi und Dienstkonfigurationen auswählen.
Das obige ist der detaillierte Inhalt vonVerwendung von Spring Security OAuth für sichere Autorisierung in der Java-API-Entwicklung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!