Giriş
OAuth ve JWT'nin birlikte kullanımı dışında sadece JWT kullanarak authentication da yapılabilir.
Angular İle Kullanmak
Kullandığımız front end kütüphanesinde (örneğin Angular) bir HttpInterceptor kullanarak tüm dışarı giden (outgoing) Http istekleri için Json Web Token bilgisini eklemek gerekir.
Adımlar
Adım sırası kabaca şöyle.
Hemen hemen aynı adımları izleyen bir başka uygulama burada.
Her iki örnek te token üretmek için io.jsonwebtoken.Jwts kütüphanesini kullanıyor.
OAuth ve JWT'nin birlikte kullanımı dışında sadece JWT kullanarak authentication da yapılabilir.
Angular İle Kullanmak
Kullandığımız front end kütüphanesinde (örneğin Angular) bir HttpInterceptor kullanarak tüm dışarı giden (outgoing) Http istekleri için Json Web Token bilgisini eklemek gerekir.
Adımlar
Adım sırası kabaca şöyle.
Hemen hemen aynı adımları izleyen bir başka uygulama burada.
Her iki örnek te token üretmek için io.jsonwebtoken.Jwts kütüphanesini kullanıyor.
Maven
Şu satırı dahil ederiz
Şu satırı dahil ederiz
JwtAuthenticationRestController Sınıfı<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency>
- Uygulama JwtAuthenticationRestController vasıtasıyla iki tane Rest noktası sunar. Bunlar şöyledir
1. http://localhost:8080/authenticate
Açıklaması şöyle. JwtTokenRequest okur ve JwtTokenResponse döner.
Expose a POST API with mapping /authenticate. On passing the correct username and password, it will generate a JSON Web Token (JWT).
2. http://localhost:8080/refresh
JwtTokenRequest okur ve JwtTokenResponse döner. JwtTokenResponse yerine direkt Response nenesi de dönüleblir.
JwtTokenRequest Sınıfı
Sadece username ve password alanlarından oluşur.
JwtTokenResponse Sınıfı
Sadece token isimli String tipinden bir alandan oluşur.
Jwt Authentication İçin Rest Endpoint
Örnek ver
Jwt Authorization İçin Filter Sınıfı - En Önemli Sınıf
JWT Authorization İçin Filter Sınıfı yazısına taşıdım
JwtUserDetails Sınıfı
UserDetails arayüzünden kalıtan bir JwtUserDetails sınıfı kodlanır. Bu sınıf kullanıcı hakkında bilgileri içerir.
JwUserDetailsService Sınıfı
UserDetailsService arayüzünden kalıtan bir JwUserDetailsService sınıfı kodlanır. Bu sınıf belirtilen isme ve şifreye sahip JwtUserDetails nesnesini döner veya exception fırlatır.
JwtTokenUtil Sınfı
Token içindeki çeşitli alanları erişimi kolaylaştırır.
UserDetails arayüzünden kalıtan bir JwtUserDetails sınıfı kodlanır. Bu sınıf kullanıcı hakkında bilgileri içerir.
JwUserDetailsService Sınıfı
UserDetailsService arayüzünden kalıtan bir JwUserDetailsService sınıfı kodlanır. Bu sınıf belirtilen isme ve şifreye sahip JwtUserDetails nesnesini döner veya exception fırlatır.
JwtTokenUtil Sınfı
Token içindeki çeşitli alanları erişimi kolaylaştırır.
WebSecurityConfigurerAdapter Sınıfı
Şöyle yaparız
@Configuration@EnableWebSecurity@EnableGlobalMethodSecurity(prePostEnabled = true)public class WebSecurityConfig extends WebSecurityConfigurerAdapter {@Autowiredprivate JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint;@Autowiredprivate JwtRequestFilter jwtRequestFilter;@Overrideprotected void configure(HttpSecurity httpSecurity) throws Exception {// dont authenticate this particular requesthttpSecurity.authorizeRequests().antMatchers("/authenticate").permitAll().antMatchers(HttpMethod.OPTIONS, "/**").permitAll().// all other requests need to be authenticatedanyRequest().authenticated().and()// make sure we use stateless session; session won't be used to// store user's state..exceptionHandling().authenticationEntryPoint(jwtAuthenticationEntryPoint).and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);// Add a filter to validate the tokens with every requesthttpSecurity.addFilterBefore(jwtRequestFilter,
UsernamePasswordAuthenticationFilter.class);}}
JwtAuthenticationEntryPoint Sınıfı
Şöyle yaparız
@Componentpublic class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint {@Overridepublic void commence(HttpServletRequest request, HttpServletResponse response,AuthenticationException authException) throws IOException {response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized");}}
Hiç yorum yok:
Yorum Gönder