温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Spring Boot中集成Keycloak认证

发布时间:2024-11-15 15:08:10 来源:亿速云 阅读:113 作者:小樊 栏目:编程语言

在Spring Boot中集成Keycloak认证是一个相对简单的过程。Keycloak是一个开源的身份和访问管理解决方案,可以与Spring Boot应用程序无缝集成。以下是将Keycloak集成到Spring Boot应用程序的步骤:

1. 安装Keycloak

首先,你需要在你的环境中安装Keycloak服务器。你可以从Keycloak官方网站下载并安装适合你操作系统的版本。

2. 配置Keycloak

启动Keycloak服务器后,你需要创建一个新的Realm和Client。

  1. 登录到Keycloak管理控制台: 打开浏览器,访问http://localhost:8080/auth/admin/,并使用管理员账户登录。

  2. 创建Realm

    • 点击“Realm Settings”。
    • 点击“Create realm”。
    • 输入Realm名称(例如:myrealm)。
    • 点击“Save”。
  3. 创建Client

    • 在Realm设置页面,点击“Clients”。
    • 点击“Create client”。
    • 输入Client名称(例如:myclient)。
    • 选择“Service Accounts”作为Client类型。
    • 点击“Save”。
  4. 配置Service Account

    • 在Client设置页面,点击“Service Accounts”。
    • 点击“Create service account”。
    • 输入Service Account名称(例如:myuser)。
    • 分配适当的权限(例如:user:read-profile)。
    • 点击“Save”。
    • 记下Service Account的Credentials(例如:密码)。

3. 配置Spring Boot应用程序

在你的Spring Boot应用程序中,你需要添加Keycloak相关的依赖,并配置认证和授权。

添加依赖

在你的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

创建一个新的配置类来配置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();
    }
}

创建登录页面

在你的Spring Boot应用程序中创建一个简单的登录页面(例如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. 运行应用程序

启动你的Spring Boot应用程序,并访问http://localhost:8080/login页面。你应该能够使用Keycloak创建的账户登录。

通过以上步骤,你已经成功地将Keycloak集成到你的Spring Boot应用程序中,并配置了基本的认证和授权。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI