0
点赞
收藏
分享

微信扫一扫

IAM身份认证与权限管理之Keycloak部署与集成

晚熟的猫 04-14 09:00 阅读 29

Keycloak 是一个开源的身份和访问管理(Identity and Access Management, IAM)解决方案,由 Red Hat 主导开发。它为现代应用程序和服务提供单点登录(Single Sign-On, SSO)、身份管理、和访问控制功能。Keycloak 旨在减少开发者集成身份验证和授权的复杂度,同时提供灵活且强大的安全功能。


关键功能

单点登录(SSO)

允许用户在一次登录后访问多个应用和服务,而无需再次登录。

身份提供

支持多种身份认证方式,包括密码认证、LDAP、Active Directory、SAML、OAuth 2.0、OpenID Connect 等。

用户管理

提供用户注册、个人信息管理、密码重置、多因素认证(MFA)、账户锁定等功能。

社交登录

支持通过 Google、Facebook、GitHub、Twitter 等社交媒体账号进行登录。

联盟身份

支持身份联盟(Federation),可以与现有的身份存储系统如 LDAP 和 Active Directory 集成。

授权服务

提供基于角色、基于属性和基于政策的访问控制(RBAC, ABAC, PBAC),实现细粒度的安全策略管理。

客户端适配

提供多种语言和框架的客户端适配库,如 JavaScript、Node.js、Java、Spring、Python 等,方便开发者集成。

可扩展性和可定制性

提供广泛的扩展点和定制选项,如主题定制、事件监听、SPI(Service Provider Interface)等。

管理控制台

通过直观的 Web 界面进行用户、角色和安全策略管理,方便管理员操作。

多租户支持

通过Realm进行多租户管理,不同Realm之间相互隔离,可独立管理用户和配置。

优势

易用性

Keycloak 提供了大量开箱即用的功能,大大简化了身份认证和授权的集成过程。

灵活性

支持多种认证协议和方式,能够适应不同的应用场景和需求。

安全性

提供强有力的安全机制和多因素认证,提升应用和服务的安全等级。

社区支持

作为一个活跃的开源项目,Keycloak 拥有广泛的社区和企业支持,为其稳定性和持续发展提供保障。

使用场景

企业应用和服务的单点登录

为企业内部的各种应用和服务提供统一的身份认证和访问控制。

API 安全

为微服务架构中的 API 提供安全认证和授权管理。

应用集成

通过 Keycloak 实现通过社交媒体登录功能,增强用户体验。

SaaS 平台

多租户支持和灵活的安全策略,使 Keycloak 适用于各类 SaaS 平台。

Keycloak 是一个功能丰富、灵活且安全的身份和访问管理解决方案,非常适合需要集中化的身份认证和授权管理的现代应用开发环境。

部署 Keycloak 可以通过多种方式进行,包括使用 Docker、Kubernetes、直接在本地或服务器上安装,以及使用容器编排工具等。以下是几种常见的 Keycloak 部署方式:

1. 使用 Docker 部署 Keycloak

步骤1:安装 Docker

如果还没有安装 Docker,请先根据官方文档安装 Docker (https://docs.docker.com/get-docker/)。

步骤2:拉取 Keycloak Docker 镜像

运行以下命令来拉取最新的 Keycloak Docker 镜像:

docker pull quay.io/keycloak/keycloak:latest

步骤3:运行 Keycloak 容器

运行以下命令启动 Keycloak 容器:

docker run -d \

 -e KEYCLOAK_USER=admin \

 -e KEYCLOAK_PASSWORD=admin \

 -p 8080:8080 \

 --name keycloak \

 quay.io/keycloak/keycloak:latest

在上述命令中,-e 选项用于设置环境变量。这些变量设置了 Keycloak 管理员用户和密码。

步骤4:访问 Keycloak

打开浏览器,访问 http://localhost:8080/,即可看到 Keycloak 管理控制台的登录界面。使用在上一步中设置的管理员用户名和密码(如 admin/admin)登录。

2. 本地或服务器上直接安装 Keycloak

步骤1:下载 Keycloak

访问 Keycloak 官方网站 (https://www.keycloak.org/downloads),下载最新的 Keycloak 安装包。

步骤2:解压 Keycloak

解压下载的安装包:

tar -xvzf keycloak-<version>.tar.gz

cd keycloak-<version>/

步骤3:配置 Keycloak

可以根据需要修改 standalone/configuration/standalone.xml 文件,配置数据源、网络连接等。

步骤4:启动 Keycloak

在解压后的目录中运行以下命令启动 Keycloak:

bin/standalone.sh

步骤5:创建管理员用户

启动后Keycloak服务器后,打开另一个终端窗口,运行以下命令创建管理员用户:

bin/add-user-keycloak.sh -r master -u admin -p admin

步骤6:访问 Keycloak

打开浏览器,访问 http://localhost:8080/auth,即可看到 Keycloak 管理控制台的登录界面。

3. 使用 Kubernetes 部署 Keycloak

步骤1:安装 Kubernetes 和 kubectl

请确保已经在本地或服务器上安装并配置了 Kubernetes 集群和 kubectl 工具。

步骤2:部署 Keycloak 到 Kubernetes

创建一个 Kubernetes 部署文件 keycloak-deployment.yaml,内容如下:

apiVersion: apps/v1

kind: Deployment

metadata:

 name: keycloak

spec:

 replicas: 1

 selector:

   matchLabels:

     app: keycloak

 template:

   metadata:

     labels:

       app: keycloak

   spec:

     containers:

     - name: keycloak

       image: quay.io/keycloak/keycloak:latest

       ports:

       - containerPort: 8080

       env:

       - name: KEYCLOAK_USER

         value: "admin"

       - name: KEYCLOAK_PASSWORD

         value: "admin"

---

apiVersion: v1

kind: Service

metadata:

 name: keycloak

spec:

 ports:

 - port: 8080

 selector:

   app: keycloak

步骤3:应用部署文件

使用 kubectl 命令应用部署文件:

kubectl apply -f keycloak-deployment.yaml

步骤4:访问 Keycloak

使用 kubectl 端口转发功能,访问 Keycloak 服务:

kubectl port-forward service/keycloak 8080:8080

打开浏览器,访问 http://localhost:8080/auth,即可看到 Keycloak 管理控制台的登录界面。

通过以上步骤,可以在不同环境下部署 Keycloak。从本地开发到生产环境,选择适合的部署方式可以帮助您更好地管理和保护您的身份与访问管理服务。

将 Keycloak 与 Active Directory (AD) 集成,可以使 Keycloak 通过 AD 进行用户认证和管理。下面是详细的步骤,教您如何实现这一集成:

前提条件

已经部署好 Keycloak 服务器

Active Directory 可用,并具有管理员账户的凭据

步骤1:登录 Keycloak 管理控制台

打开浏览器,访问 Keycloak 管理控制台 (例如 http://localhost:8080/auth/admin)。

使用管理员账户进行登录。

步骤2:创建一个新的 Realm(如果需要)

在 Keycloak 管理控制台左上角,点击当前 Realm 的名字(默认是 Master)。

点击“Add realm”按钮。

输入 Realm 名称,然后点击“Create”。

步骤3:配置 Active Directory 用户存储

选择左侧导航栏的 “User Federation”。

点击界面右侧的 “Add provider”,选择 “ldap”。

步骤4:配置 LDAP 设置

在弹出的配置界面上,填写以下内容:

连接设置

Edit Mode: READ_ONLY (也可选择 WRITABLE, 取决于您是否希望通过 Keycloak 修改 AD 用户)

Vendor: Active Directory

Connection URL: ldap://<AD_server_address>:389 (或 ldap://<AD_server_hostname>:389)

Users DN: CN=Users,DC=example,DC=com (这里根据具体的 AD 结构填写)

Bind DN: CN=Administrator,CN=Users,DC=example,DC=com

Bind Credential: 输入 AD 管理员用户的密码

用户映射

Username LDAP Attribute: sAMAccountName

RDN LDAP Attribute: CN

UUID LDAP Attribute: objectGUID

User Object Classes: person, organizationalPerson, user

完成上述设置后,点击 “Save”。

步骤5:同步用户和组

在保存成功后的页面,选择 “Synchronize all users”,手动同步 AD 用户到 Keycloak。

选择 “Mapper” 标签页,点击 “Create”,创建新的映射:

Name: groups

Mapper Type: group-ldap-mapper

LDAP Groups DN: CN=Users,DC=example,DC=com

Group Name LDAP Attribute: CN

Group Object Classes: group

Preserve Group Inheritance: 设置为 ON

Membership LDAP Attribute: member

Membership User LDAP Attribute: distinguishedName

Membership Attribute Type: DN

点击 “Save” 保存配置。然后选择 “Synchronize LDAP Groups to Keycloak” 进行同步。

步骤6:设置 Keycloak 角色和策略

配置 Keycloak,使用户能够通过 Active Directory 进行认证并分配适当的角色和权限。

在左侧导航栏中,选择 “Clients”。

选择一个客户端,例如 account。

进入 “Mappers” 标签页,创建一个新的 Mapper:

Mapper Type: Group Membership Mapper

Token Claim Name: groups

Full Group Path: 设置为 ON

点击 “Save” 保存配置。

步骤7:测试 AD 集成

在 Keycloak 管理控制台,选择 “Users”,查看是否已成功同步 AD 用户。

尝试使用 AD 用户进行登录,验证是否可以通过 Keycloak 登录成功。

通过上述步骤,Keycloak 应该已经成功集成到 Active Directory 中,使您的用户能够通过 AD 进行身份验证,并可以通过 Keycloak 管理用户权限和访问控制。

将公司内部其他应用集成到Keycloak

将 Keycloak 与内部应用集成,可以为应用程序提供单点登录(Single Sign-On),并确保统一的身份验证和访问控制。 以下是如何将 Keycloak 与典型的内部应用集成的详细步骤:


步骤1:设置 Keycloak 实例

假设您的 Keycloak 实例已经部署并运行。如果还没有,请参阅之前的部署指南,确保您的 Keycloak 服务器已正确设置和运行。


步骤2:创建一个 Realm

创建一个新的 Realm 可以帮助您将不同的应用程序和安全策略分开管理。


登录Keycloak管理控制台 (例如 http://localhost:8080/auth/admin)。

在左上角点击当前 Realm 的名称(默认是 Master)。

点击 “Add realm” 按钮。

输入新 Realm 的名称,然后点击 “Create”。

步骤3:创建一个 Client

为您的内部应用程序创建一个 Client。


在左侧导航栏中选择“Clients”。

点击 “Create” 按钮。

输入 Client ID(这可以是您的应用程序的标识符)。

在 Client Protocol 中选择 openid-connect。

点击 “Save”。

配置 Client 时,需要填写以下配置参数:


Root URL: 您的应用程序的根 URL(例如 http://localhost:3000)。

Valid Redirect URIs: 登录成功后可以重定向的有效 URI(例如 http://localhost:3000/*)。

Base URL:通常与 Root URL 相同。

然后点击 “Save”。


步骤4:配置 Client 的角色和映射

在 Client 的设置页面,点击 “Mappers” 标签页。

创建新的 Mapper,可以选择内置的如“username”、 “email”、 “roles”等。

步骤5:配置与应用的集成

根据应用程序的开发语言和框架,可以使用不同的库和工具集成 Keycloak。下面是一些常见的场景:


Java 应用(使用 Spring Boot)

在 pom.xml 中添加 Keycloak Starter 依赖:


<dependency>

   <groupId>org.keycloak</groupId>

   <artifactId>keycloak-spring-boot-starter</artifactId>

   <version>最新版本</version>

</dependency>

配置 application.properties:


keycloak.realm=your_realm_name

keycloak.auth-server-url=http://localhost:8080/auth

keycloak.resource=your_client_id

keycloak.credentials.secret=your_client_secret (if using confidential client)

keycloak.use-resource-role-mappings=true

配置 Spring Security:

创建一个新的配置类 SecurityConfig.java:


@Configuration

@EnableWebSecurity

@EnableGlobalMethodSecurity(jsr250Enabled = true)

public class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter {

   @Override

   protected void configure(HttpSecurity http) throws Exception {

       super.configure(http);

       http.authorizeRequests()

           .antMatchers("/public/**").permitAll()    // 公共路径

           .anyRequest().authenticated();           // 其他路径需要验证

   }

   

   @Bean

   @Override

   protected KeycloakAuthenticationProvider keycloakAuthenticationProvider() {

       KeycloakAuthenticationProvider provider = new KeycloakAuthenticationProvider();

       provider.setGrantedAuthoritiesMapper(new SimpleAuthorityMapper());

       return provider;

   }

   

   @Bean

   public KeycloakSpringBootConfigResolver keycloakConfigResolver() {

       return new KeycloakSpringBootConfigResolver();

   }

}

Node.js 应用

使用 Keycloak Connect 中间件:


npm install keycloak-connect

在您的应用中使用它:


const session = require('express-session');

const Keycloak = require('keycloak-connect');

const express = require('express');

const app = express();


const memoryStore = new session.MemoryStore();


app.use(session({

   secret: 'your-secret',

   resave: false,

   saveUninitialized: true,

   store: memoryStore

}));


const keycloak = new Keycloak({

   store: memoryStore

});


app.use(keycloak.middleware());


app.get('/secure', keycloak.protect(), (req, res) => {

   res.send('This is a secure endpoint');

});


app.get('/public', (req, res) => {

   res.send('This is a public endpoint');

});


app.listen(3000, () => {

   console.log('Listening on port 3000');

});

Angular 应用

安装 Keycloak Angular 依赖:


npm install keycloak-angular keycloak-js

配置 Keycloak Angular:

在 app.module.ts 中配置 Keycloak:


import { KeycloakService } from 'keycloak-angular';


function initializer(keycloak: KeycloakService) {

   return () =>

       keycloak.init({

           config: {

               url: 'http://localhost:8080/auth',

               realm: 'your_realm_name',

               clientId: 'your_client_id'

           },

           initOptions: {

               onLoad: 'login-required'

           }

       });

}


@NgModule({

   ...

   providers: [

       {

           provide: APP_INITIALIZER,

           useFactory: initializer,

           multi: true,

           deps: [KeycloakService]

       }

   ]

})

export class AppModule {}

这只是一些常见示例,实际应用中,可根据具体情况进行调整和配置。通过上述的步骤,您应该能够成功将 Keycloak 集成到您的内部应用中,提供统一的身份验证和访问控制。

举报

相关推荐

0 条评论