2017-03-16 8 views
3

私は古い春のブートセキュリティアプリからキークローケに移行したいと思います。下は私のセキュリティ設定です。私たちはkeycloak管理ページ上の役割とユーザーを作成する必要があり、ことが判明、しかし、私の現在のシステムが何であるかを、ユーザーと役割がある春のブートセキュリティからキークローキングに移行

@Configuration 
@EnableWebSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{ 
    @Autowired 
    private CustomUserDetailsService customUserDetailsService; 
    @Override 
     protected void configure(HttpSecurity http) throws Exception { 
     http.csrf().disable(); 

     http 
     .authorizeRequests() 
      .antMatchers("/*", "/static/**", "/css/**", "/js/**", "/images/**").permitAll() 
      .antMatchers("/school-admin/*").hasAuthority("SCHOOL_ADMIN").anyRequest().fullyAuthenticated() 
      .antMatchers("/teacher/*").hasAuthority("TEACHER").anyRequest().fullyAuthenticated() 
      .anyRequest().authenticated().and() 

     .formLogin() 
      .loginPage("/login.html").defaultSuccessUrl("/loginSuccess.html") 
      .failureUrl("/login.html?error").permitAll().and() 

     .logout() 
      .logoutRequestMatcher(new AntPathRequestMatcher("/logout.html")).logoutSuccessUrl("/login.html?logout"); 

    } 

    @Autowired 
     public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
     auth.userDetailsService(customUserDetailsService).passwordEncoder(new BCryptPasswordEncoder()); 
     } 
} 

は、私はすでにkeycloakをインストールして、それがポート8080.Theの問題で実行されています私のMySQL DBに。私は認証と認可のためにキークローキングにユーザーとロールを挿入したくありません。

答えて

1

明らかに、最初のことは実行中のキークロークインスタンスです。これは、オンラインドキュメントで実行可能である必要があります。 WildflyインスタンスでKeycloakを使用します。 次のステップでは、レルムと少なくとも1つのクライアントをkeycloakに定義して、スプリングブートアプリケーションとの接続に使用します。あなたのアプリケーションのPOMであなたは残りの部分はあなたのapplication.propertiesで行うことができます

<dependency> 
    <groupId>org.keycloak</groupId> 
    <artifactId>keycloak-tomcat8-adapter</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.keycloak</groupId> 
    <artifactId>keycloak-spring-boot-adapter</artifactId> 
</dependency> 
<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
</dependency> 

すなわちようkeylcoakアダプターの依存関係を追加する必要があります、それはあなたがアダプタがkeycloakとのどの部分に接続する方法を設定する場所ですアプリケーションを保護する必要があります。これは次のようになります

keycloak.realm=myrealm #realm that you have created in keycloak, contains your client 
keycloak.auth-server-url=KeycloakHOST:KeycloakPort/auth # Substitute with your settings 
keycloak.ssl-required=none 
keycloak.resource=myclient 
#keycloak.use-resource-role-mappings=true 
keycloak.enable-basic-auth=true # we use basic authentication in this example 
keycloak.credentials.secret=2dcf74ca-4e4f-44bf-9774-6c32c12783d3 # Secret generated for you client in keycloak 
keycloak.cors=true 
keycloak.cors-allowed-headers=x-requested-with,origin,content-type,accept,authorization 
keycloak.cors-allowed-methods=GET,POST,DELETE,PUT,OPTIONS 
keycloak.cors-max-age=3600 
keycloak.expose-token=true 
keycloak.bearer-only=true 
keycloak.securityConstraints[0].securityCollections[0].name=adminRule 
keycloak.securityConstraints[0].securityCollections[0].authRoles[0]=SCHOOL_ADMIN 
keycloak.securityConstraints[0].securityCollections[0].patterns[0]=/school-admin/* 
keycloak.securityConstraints[1].securityCollections[0].name=teacherRule 
keycloak.securityConstraints[1].securityCollections[0].authRoles[0]=TEACHER 
keycloak.securityConstraints[1].securityCollections[0].patterns[0]=/teacher/* 

これは、基本的にはあなたのスプリングブートアプリケーションで行う必要があります。上記の規則でカバーされていない他のすべてのエンドポイントは、すべてのユーザーに使用可能です。私が記述したより長いバージョンであるそのことについては、かなり良いチュートリアルがあります。here

+0

はい私はキークローキングを開始しました。しかし、問題はすべてのユーザーの資格情報は、キークローキングではなく、私のデータベースにあります。だから私は認証と認可のために私のdbとキークローキングのチェックを行うことができますか? – boycod3

+0

あなたはカスタムプロバイダを書くことができますが、私はこれまでに自分でそれをしていませんが、可能でなければなりません。いくつかの情報についてはhttps://keycloak.gitbooks.io/server-adminstration-guide/content/topics/user-federation/custom.htmlを参照してください。ちょっとgoogleしてください。一般的に実装する必要があるインターフェースが存在し、この実装はDBに送られ、そこで与えられたユーザーデータを照会します。インタフェースで必要とされるすべてのデータを提供できるかどうかは疑問ですが、それを確認する必要があります。 – hecko84

+0

私はちょうどJPAに接続されたいくつかのDBを使用してより良い例を見つけました。これもまた大きなメリットです。このFDI機能をキークローキングで使用すると、複数のプロバイダを接続して使用することができます。 – hecko84

関連する問題