问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

解决登录与SSO的开发痛点:Keycloak快速部署与最简单登录验证教程

创作时间:
作者:
@小白创作中心

解决登录与SSO的开发痛点:Keycloak快速部署与最简单登录验证教程

引用
CSDN
1.
https://m.blog.csdn.net/m0_70878103/article/details/144785915

言简意赅的讲解Keycloak解决的痛点

Keycloak 是一个开源的身份和访问管理工具,提供单点登录(SSO)、用户管理、身份验证、授权等功能。它支持标准的身份协议如 OAuth2.0、OpenID Connect(OIDC)和 SAML 2.0,非常适合集成到现代微服务架构中。

最简单的 Keycloak 登录验证示例

在 Keycloak 中,最简单的登录验证方式是通过其提供的 token 接口,通过 POST 请求验证用户登录信息并获取令牌。以下是一个基于 Keycloak 的最小实现示例:

步骤 1:启动 Keycloak 服务

  1. 启动 Keycloak,并创建一个
    Realm
    (领域)。

  1. 创建一个
    Client
    (客户端),比如命名为
    my-app
    ,设置协议为 OIDC。

  1. 在该 Realm 下创建一个用户,设置用户名和密码。

步骤 2:调用 Token 接口进行验证

Realms对应的控制台

  
http://<keycloak-server>/realms/<realm-name>/account
  

使用
curl
或 HTTP 客户端工具调用 Keycloak 提供的 Token 接口:

  
curl -X POST "http://<keycloak-server>/realms/<realm-name>/protocol/openid-connect/token" \
     -H "Content-Type: application/x-www-form-urlencoded" \
     -d "grant_type=password" \
     -d "client_id=<client-id>" \
     -d "username=<username>" \
     -d "password=<password>"
  

示例代码(Python 示例)

  
import requests
def keycloak_login(keycloak_url, realm, client_id, username, password):
    url = f"{keycloak_url}/realms/{realm}/protocol/openid-connect/token"
    data = {
        "grant_type": "password",
        "client_id": client_id,
        "username": username,
        "password": password
    }
    response = requests.post(url, data=data)
    if response.status_code == 200:
        print("Login successful")
        print("Access Token:", response.json()["access_token"])
    else:
        print("Login failed", response.json())
# Example usage
keycloak_login(
    keycloak_url="http://localhost:8080",
    realm="myrealm",
    client_id="my-app",
    username="testuser",
    password="testpassword"
)
  

Keycloak 的功能详解

Keycloak 的功能主要分为以下几个部分:

  1. 单点登录(SSO)
  • 用户登录一次后,即可访问所有已配置的应用,无需再次登录。
  • 支持标准协议(OIDC、OAuth2.0、SAML)实现互通。
  1. 用户管理
  • 提供用户注册、账号激活、密码恢复等功能。
  • 用户可以通过 Keycloak 提供的 UI 自助修改个人信息。
  1. 身份认证与授权
  • 支持多种认证机制(用户名/密码、OTP、社交登录等)。
  • 提供基于角色和属性的精细化权限控制。
  1. 多租户支持
  • 通过 Realm 隔离不同的租户,每个 Realm 拥有独立的配置。
  1. 集成支持
  • 内置适配器和 API,可以方便地集成到 Java、Node.js、Spring 等应用中。

通过 Docker 部署 Keycloak

使用Docker快速部署 Keycloak 是一种高效的方法,以下是部署步骤:

步骤 1:准备 Docker 环境

确保已安装 Docker,并启动 Docker 服务。

步骤 2:拉取 Keycloak 镜像

  
docker pull quay.io/keycloak/keycloak:latest
  

步骤 3:运行 Keycloak 容器

  
docker run -d --name keycloak \
  -p 8080:8080 \
  -e KEYCLOAK_ADMIN=admin \
  -e KEYCLOAK_ADMIN_PASSWORD=admin \
  quay.io/keycloak/keycloak:latest start-dev
  
  • KEYCLOAK_ADMIN

    KEYCLOAK_ADMIN_PASSWORD
    用于设置管理员账号和密码。
  • start-dev
    是开发模式,适合本地开发和测试。

步骤 4:访问 Keycloak 控制台

浏览器访问
http://localhost:8080
,使用上面设置的管理员账号登录。

Keycloak 的集成方法

Keycloak 提供多种集成方式,可以根据应用的开发语言和框架选择适合的方案。

1.前端与 Keycloak 集成

通过 Keycloak 的 JavaScript Adapter 实现前端集成:

  • 安装依赖:
  
npm install keycloak-js
  
  • 初始化 Keycloak:
  
const keycloak = new Keycloak({
  url: 'http://localhost:8080/',
  realm: 'myrealm',
  clientId: 'my-app'
});
keycloak.init({ onLoad: 'login-required' }).then(authenticated => {
  if (authenticated) {
    console.log('User authenticated');
  }
});
  

2.后端与 Keycloak 集成

使用 Keycloak 提供的 REST API 或适配器。

使用 Spring Boot 集成:

  1. 添加依赖:
  
<dependency>
    <groupId>org.keycloak</groupId>
    <artifactId>keycloak-spring-boot-starter</artifactId>
    <version>21.0.0</version>
</dependency>
  
  1. 配置
    application.yml
  
keycloak:
  realm: myrealm
  auth-server-url: http://localhost:8080/
  resource: my-app
  public-client: true
  principal-attribute: preferred_username
  
  1. 添加安全配置:
  
@Configuration
@EnableWebSecurity
public class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/public/**").permitAll()
            .anyRequest().authenticated();
    }
}
  

总结

Keycloak 是一个功能强大的 IAM 工具,支持多种协议和认证方式,能够快速集成到不同的技术栈中。通过本文,你可以快速启动 Keycloak 服务,实现最简单的登录验证,并了解如何通过 Docker 部署和在前后端应用中集成它。

通过上述内容,你就已经基本理解了这个方法,基础用法我也都有展示。如果你能融会贯通,我相信你会很强

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号