31 Mayıs 2020 Pazar

SpringSecurity OAuth2 AuthorizationServerConfigurerAdapter Sınıfı - Kendi OAuth2 Authorization Sunucumuz İçin

Giriş
Bu sınıf maintenance modda.@EnableAuthorizationServer yazısına bakabilirsiniz.

Daha derli doplu bir yazı için Authorization Code Grant yazısına bakabilirsiniz

Örnek
Şöyle yaparız.
@Configuration
@EnableAuthorizationServer
protected static class AuthorizationServerConfiguration extends
  AuthorizationServerConfigurerAdapter {

  @Autowired
  private AuthenticationManager authenticationManager;

  @Autowired
  private UserDetailsService userDetailsService;

  @Autowired
  private PasswordEncoder passwordEncoder;

  @Autowired
  private TokenStore tokenStore;

  @Autowired
  private SecurityConfiguration securityConfiguration;
  ...
  
}
Bu sınıfın 3 temel metodu var

configure metodu - AuthorizationServerSecurityConfigurer
İmzası şöyle. Bu metod'da hep aynı şey yapılıyor.
@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception;
Örnek
Şöyle yaparız.
@Override
public void configure(AuthorizationServerSecurityConfigurer security) {
  security.tokenKeyAccess("permitAll()")
    .checkTokenAccess("isAuthenticated()");
}
Örnek
Eğer kullanıcı bilgisi şifreli gelsin istersek şöyle yaparız. PasswordEncoder olarak örneğin BCryptPasswordEncoder kullanılabilir
@Override
public void configure(AuthorizationServerSecurityConfigurer security) {
  security.tokenKeyAccess("permitAll()")
    .checkTokenAccess("isAuthenticated()")
    .passwordEncoder(this.passwordEncoder);
}
Örnek
Şöyle yaparız
@Override
public void configure(AuthorizationServerSecurityConfigurer oauthServer){
  oauthServer
    .tokenKeyAccess("permitAll()")
    .checkTokenAccess("permitAll()")
    .passwordEncoder(passwordEncoder)
    .allowFormAuthenticationForClients();
}
configure - ClientDetailsServiceConfigurer - Kullanıcı Bilgileri
İmzası şöyle. Kullanıcı bilgileri ve token ile ilgili ayarlar burada yapılır.
@Override
 public void configure(ClientDetailsServiceConfigurer clients) throws Exception;
authorizedGrantTypes "authorization_code""client-credentials", "password","refresh_token" seçeneklerini alabilir.
Açıklama şöyle
grant_type means the client can get access_token by client username and password or refresh_token.
Örnek
Şöyle yaparız. Burada authorizedGrantTypes() metoduna "password" geçildiği için client şifresini gönderip token alabilir.
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
  clients.inMemory().withClient("client")
    .secret(passwordEncoder.encode(("secret")))
    .authorizedGrantTypes("password")
    .scopes("webclient","mobileclient");
}
Örnek
Şöyle yaparız. Burada authorizedGrantTypes() metoduna "password" ve "refresh_token" geçildiği için client şifresini gönderip token alabilir. Token'ı yenileyebilir.
clients.inMemory()
  .withClient(...)
  .authorizedGrantTypes("password", "refresh_token")
  .scopes("mobile_app")
  .resourceIds(...)
  .accessTokenValiditySeconds(...)
  .refreshTokenValiditySeconds(...)
  .secret(...);
Örnek
Şöyle yaparız
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
  //IN-memory authentication configuration
  clients.inMemory()
      .withClient("web-portal")
      .authorizedGrantTypes("password", "authorization_code", "refresh_token", "implicit")
      .scopes("ui")
      .autoApprove(true)
      .secret(passwordEncoder.encode("password"))
      .redirectUris("http://localhost:8093/socialDiagnostica/login/oauth2/code/")
    .and()
      withClient("mobile-app")
      authorizedGrantTypes("client_credentials", "refresh_token", "password")
      scopes("ui")
      .autoApprove(true)
      .secret(passwordEncoder.encode("password"))
    .and()
      .withClient("social-diagnostica-service")
      .secret(passwordEncoder.encode("password"))
      .authorizedGrantTypes("client_credentials", "refresh_token")
      .scopes("server")
      .autoApprove(true);
//clients.jdbc(dataSource);
}
configure - AuthorizationServerEndpointsConfigurer - TokenStore ve AuthenticationManager Ayarları
Authorization için kullanılack endpoint'lerin ayarlarını yapabilmeyi sağlar.

Hiç yorum yok:

Yorum Gönder