JumpServer V3堡垒机实现SAML2认证

一 、概要

Keycloak 是适用于现在应用程序和服务的开源身份和访问管理的解决方案。Keycloak 提供用户联合、强身份认证、用户管理及细粒度权限管理等功能,以求客户在最小的成本下向应用程序和服务添加身份验证等功能。

(1) OIDC

    OIDC(OpenID Connect)在OAuth 2.0上构建了一个身份层,是一个基于OAuth 2.0协议的身份认证标准协议。OIDC使用OAuth 2.0的授权服务器来为第三方客户端提供用户的身份认证,并把对应的身份认证信息传递给客户端,且可以适用于各种类型的客户端(例如服务端应用、移动APP、JavaScript 应用),且完全兼容OAuth 2.0协议。

(2)SAML

SAML(Security Assertion Markup Language)是一种用于安全性断言的标记语言,目前的最新版本是2.0,是Web浏览器用来通过安全令牌启用单点登录(SSO)的标准协议。

(3)OIDC协议与SAML 2.0协议之间的相同点与不同点:

协议相同点不同点

OIDC

都是实现单点登录的认证协议;

都是目前安全且成熟的技术标准;

都依赖具有标准重定向功能的软件实现跳转(浏览器)。

以JSON格式传输用户数据;

2007年最终确定并发布(来自维基百科);

相对轻量级;

通过断言验证用户。

SAML2.0

2005年被批准为OASIS标准协议(来自维基百科);

以XML格式传输用户数据;

相对重量级;

通过JWT令牌进行验证,支持去中心化身份验证。

概要引用出处: 操作指南|JumpServer与Keycloak集成对接 - 技术博客 – FIT2CLOUD 飞致云

二 、准备部署好KeyCloak.

(1)keycloak的官网地址:KeycloakKeycloak is an open source identity and access management solutionhttps://www.keycloak.org/

(2)部署有几种方式,我是用的是docker部署,官方也是推荐docker部署,我的版本为21.0.2

执行这条命令

docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:21.0.2 start-dev

执行完之后,登录IP地址访问 https://ip:8080

默认管理员账号密码是 admin  admin

三、在机器中执行以下命令

openssl genrsa -out server.key 2048 # 这个生成的是私钥

openssl req -new -x509 -days 3650 -key server.key -out server.crt -subj "/C=CN/ST=mykey/L=mykey/O=mykey/OU=mykey/CN=domain1/CN=domain2/CN=domain3" # 这个是证书

把生成的私钥和证书,保存下来。

四、登录JumpServer ,在认证设置中,选择SAML2。

将刚刚保存的私钥以及证书,分别上传到SP秘钥和SP证书中。点击下方提交后查看。

 右击另存为,命名随便,我命名为1.xml,文件等会会用到。

五、配置keycloak

(1)点击左侧创建Create Realm,命名为JumpServer-SAML2

 

(2)按照图示,新建一个 client,在这边选择导入,把刚刚保存的1.xml文件导入进来。

 (3)导入完成之后点击我们刚开始创建的realm。

在Settings中设置Client ID,点击save。 

 (4)根据图示,以此设置 

 

 (5) 根据图示,创建一个新的Mappers。

 

注意这两个的映射关系。

(6)根据图示创建用户

 此时创建的用户名(Username)以及密码,是登录jumpserver所用到的账号及密码。 我设置的账号jms  密码123456

 

 (7)点击左侧的Realm settings,点击红色框查看。

 

(8)将上述地址栏信息填入到 JumpServer SAML认证中。

 六、点击登录JumpServer,选择登录方式为SAML

 显示登录成功。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现 SAML 中的 Identity Provider (IdP),你可以使用 Node.js 并结合一些 SAML 库来完成。以下是一些可供参考的库: - [passport-saml](https://github.com/node-saml/passport-saml): 一个用于 Passport 的 SAML 库,支持 IdP 和 SP 的单点登录 (SSO)。 - [samlify](https://github.com/auth2factor/samlify): 一个支持 SAML 2.0 和 1.1 的库,可以用于构建 IdP 和 SP,支持多种 IdP 的配置选项。 - [saml-idp](https://github.com/bergie/saml-idp): 一个基于 Express 的库,用于快速创建 SAML 2.0 IdP。 下面是一个使用 `samlify` 库创建 SAML 2.0 IdP 的示例代码: ```javascript const express = require('express'); const { createIdp } = require('samlify'); const app = express(); // 创建 SAML 2.0 IdP const idp = createIdp({ entityID: 'https://your-idp.com/metadata', privateKey: 'your-private-key', privateKeyPass: 'your-private-key-password', certificate: 'your-certificate', loginEndpoint: '/login', logoutEndpoint: '/logout', bindings: { redirect: 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect', post: 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST', }, nameIDFormat: 'urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified', }); // 添加路由 app.get('/login', (req, res) => { // 创建 SAML 2.0 登录请求 const request = idp.createLoginRequest({ relayState: 'your-relay-state', destination: 'https://your-sp.com/login', }); // 跳转到 SP 的登录页面 res.redirect(request.context.destination); }); app.post('/logout', (req, res) => { // 创建 SAML 2.0 登出请求 const request = idp.createLogoutRequest({ relayState: 'your-relay-state', destination: 'https://your-sp.com/logout', }); // 跳转到 SP 的登出页面 res.redirect(request.context.destination); }); app.listen(3000, () => { console.log('SAML 2.0 IdP is running on port 3000'); }); ``` 在上述代码中,我们使用 `createIdp` 函数来创建一个 SAML 2.0 IdP,指定了一些必要的参数,例如实体 ID、私钥、证书、绑定方式等。然后添加了两个路由,用于处理登录和登出请求。在路由处理函数中,我们分别创建了 SAML 2.0 登录和登出请求,并跳转到 SP 的对应页面。 需要注意的是,这里的示例代码只提供了最基本的实现方式,实际上还需要根据具体情况进行调整和优化。同时,还需要根据不同的 SAML 库和实现方式来进行相应的配置和操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值