溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Spring Boot中集成Keycloak認(rèn)證

發(fā)布時(shí)間:2024-11-15 15:08:10 來源:億速云 閱讀:78 作者:小樊 欄目:編程語言

在Spring Boot中集成Keycloak認(rèn)證是一個(gè)相對(duì)簡單的過程。Keycloak是一個(gè)開源的身份和訪問管理解決方案,可以與Spring Boot應(yīng)用程序無縫集成。以下是將Keycloak集成到Spring Boot應(yīng)用程序的步驟:

1. 安裝Keycloak

首先,你需要在你的環(huán)境中安裝Keycloak服務(wù)器。你可以從Keycloak官方網(wǎng)站下載并安裝適合你操作系統(tǒng)的版本。

2. 配置Keycloak

啟動(dòng)Keycloak服務(wù)器后,你需要?jiǎng)?chuàng)建一個(gè)新的Realm和Client。

  1. 登錄到Keycloak管理控制臺(tái): 打開瀏覽器,訪問http://localhost:8080/auth/admin/,并使用管理員賬戶登錄。

  2. 創(chuàng)建Realm

    • 點(diǎn)擊“Realm Settings”。
    • 點(diǎn)擊“Create realm”。
    • 輸入Realm名稱(例如:myrealm)。
    • 點(diǎn)擊“Save”。
  3. 創(chuàng)建Client

    • 在Realm設(shè)置頁面,點(diǎn)擊“Clients”。
    • 點(diǎn)擊“Create client”。
    • 輸入Client名稱(例如:myclient)。
    • 選擇“Service Accounts”作為Client類型。
    • 點(diǎn)擊“Save”。
  4. 配置Service Account

    • 在Client設(shè)置頁面,點(diǎn)擊“Service Accounts”。
    • 點(diǎn)擊“Create service account”。
    • 輸入Service Account名稱(例如:myuser)。
    • 分配適當(dāng)?shù)臋?quán)限(例如:user:read-profile)。
    • 點(diǎn)擊“Save”。
    • 記下Service Account的Credentials(例如:密碼)。

3. 配置Spring Boot應(yīng)用程序

在你的Spring Boot應(yīng)用程序中,你需要添加Keycloak相關(guān)的依賴,并配置認(rèn)證和授權(quán)。

添加依賴

在你的pom.xml文件中添加以下依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.keycloak</groupId>
    <artifactId>keycloak-spring-boot-starter</artifactId>
    <version>21.0.1</version>
</dependency>

配置Keycloak

在你的application.yml文件中添加以下配置:

keycloak:
  auth-server-url: http://localhost:8080/auth
  realm: myrealm
  resource: myclient
  credentials:
    secret: <你的Service Account密碼>

配置Spring Security

創(chuàng)建一個(gè)新的配置類來配置Spring Security和Keycloak:

import org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolver;
import org.keycloak.adapters.springsecurity.KeycloakConfiguration;
import org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticationProvider;
import org.keycloak.adapters.springsecurity.config.KeycloakWebSecurityConfigurerAdapter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.authority.mapping.SimpleAuthorityMapper;
import org.springframework.security.web.authentication.session.RegisterSessionAuthenticationStrategy;
import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy;

@KeycloakConfiguration
@EnableWebSecurity
public class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter {

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        KeycloakAuthenticationProvider keycloakAuthenticationProvider = keycloakAuthenticationProvider();
        keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(new SimpleAuthorityMapper());
        auth.authenticationProvider(keycloakAuthenticationProvider);
    }

    @Bean
    @Override
    protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
        return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl());
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        super.configure(http);
        http
            .authorizeRequests()
                .antMatchers("/admin/**").hasRole("admin")
                .antMatchers("/user/**").hasRole("user")
                .anyRequest().authenticated()
            .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
            .and()
            .logout()
                .permitAll();
    }

    @Bean
    public KeycloakSpringBootConfigResolver KeycloakConfigResolver() {
        return new KeycloakSpringBootConfigResolver();
    }
}

創(chuàng)建登錄頁面

在你的Spring Boot應(yīng)用程序中創(chuàng)建一個(gè)簡單的登錄頁面(例如src/main/resources/templates/login.html):

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Login</title>
</head>
<body>
    <h1>Login</h1>
    <form action="/login" method="post">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required><br><br>
        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required><br><br>
        <button type="submit">Login</button>
    </form>
</body>
</html>

4. 運(yùn)行應(yīng)用程序

啟動(dòng)你的Spring Boot應(yīng)用程序,并訪問http://localhost:8080/login頁面。你應(yīng)該能夠使用Keycloak創(chuàng)建的賬戶登錄。

通過以上步驟,你已經(jīng)成功地將Keycloak集成到你的Spring Boot應(yīng)用程序中,并配置了基本的認(rèn)證和授權(quán)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI