本文重点介绍两种常见的单点登录协议,即OIDC(OpenID Connect)协议和SAML 2.0(Security Assertion Markup Language)协议,以及如何在JumpServer开源堡垒机上完成与Okta的集成对接。
一、概要
■ 单点登录
单点登录(Single Sign On,简称为SSO)是一种身份验证方案,允许用户使用单一的认证凭证访问到多个独立的软件系统中的任意一个,减少了用户重复认证的步骤,并且统一了不同软件间的用户认证管理。
常见的单点登录认证协议包括: OIDC、OAuth 2.0、SAML 2.0、CAS等。
■ Okta
Okta是一家美国高新技术公司,其软件的主要功能是将一家公司及其员工使用的大量软件应用整合在一起,能够让员工很方便地使用单一的、安全的账号登录他们工作所需要使用的各种自有及第三方的网络服务,并且通过细粒度的多租户身份验证确保最终用户的访问体验。
■ OIDC
OIDC(OpenID Connect)在OAuth 2.0上构建了一个身份层,是一个基于OAuth 2.0协议的身份认证标准协议。OIDC使用OAuth 2.0的授权服务器来为第三方客户端提供用户的身份认证,并把对应的身份认证信息传递给客户端,且可以适用于各种类型的客户端(例如服务端应用、移动APP、JavaScript 应用),且完全兼容OAuth 2.0协议。
■ SAML
SAML(Security Assertion Markup Language)是一种用于安全性断言的标记语言,目前的最新版本是2.0,是Web浏览器用来通过安全令牌启用单点登录(SSO)的标准协议。
■ OIDC协议与SAML 2.0协议之间的相同点与不同点:
| 协议 | OIDC | SAML 2.0 |
|---|---|---|
相同点 | 都是实现单点登录的认证协议; 都是目前安全且成熟的技术标准; 都依赖具有标准重定向功能的软件实现跳转(浏览器)。 | |
不同点 | 2007年最终确定并发布(来自维基百科); | 2005年被批准为OASIS标准协议(来自维基百科); |
| 以JSON格式传输用户数据; | 以XML格式传输用户数据; | |
| 相对轻量级; | 相对重量级; | |
| 通过断言验证用户。 | 通过JWT令牌进行验证,支持去中心化身份验证。 | |
二、对接前的准备工作
- 如果JumpServer需要与Okta平台对接,需要在官网进行注册,Okta平台的官网地址为:https://www.okta.com/;
2. 注册成功后,Okta会发送一封电子邮件,邮件内容包含独立的平台域名、用户名和临时密码信息。
三、SAML 2.0协议对接
对接步骤:Okta端
- 通过官网进入到Okta平台首页后,点击左边菜单栏中的“Applications”→“Applications”;

2. 点击“Create App Integration”按钮;

3. 选择“SAML 2.0”选项后,点击“Next”按钮;

4. 根据提示,创建应用名、登录Logo等配置信息;

5. 配置相应SAML信息;
Single sign on URL(即Okta认证成功的回调地址):http[s]://host:port/core/auth/saml2/callback/;
Audience URI(应用堡垒机的标识):http[s]://host:port/core/auth/saml2/login/;

6. 如果需要配置JumpServer设置中的同步注销功能,还需要在这里单独进行配置,点击“Show Advanced Settings”按钮(无需此功能,可忽略此步骤,建议最后此项配置);

需要配置证书,输入以下代码生成一个密钥证书,后续JumpServer堡垒机也会使用到这个密钥证书;
$ 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" # 这个是证书填写Single Logout URL(即Okta注销地址),一般为:http[s]://host:port/login/signout;

若上述 URL 配置有误,可使用以下方式获取,目的是获取左下角的地址哦

7. 设置“Attribute Statements(Optional)”选项卡,这里是用户属性映射,JumpServer默认会把SAML 2.0协议传输过来的uid字段和JumpServer中的username字段相关联;
如果想修改这里的信息,将JumpServer设置为同步修改即可,然后拉到页面底部,点击“Next”按钮;

8. 按照下图设置完成后,点击“Finish”按钮;

9. 创建应用成功后,在应用界面找到SAML Signing Certificates,选择状态为 Active 的记录,在“Action”菜单中点击“View IdP metadata”选项;
`
10. 将弹出的浏览器框地址栏中的地址保存下来,以便后续配置JumpServer;

11. 点击应用名称,进入应用设置中找到“Assignments”选项就,点击“Assign”菜单邀请用户进入当前应用。“”“”

对接步骤:JumpServer端
- 登录JumpServer后,选择“设置”→“认证设置”→“SAML2”;

2. 将对接Okta端操作中的第6步(若上述第6步跳过,则返回第6步生成密钥证书部分,执行命令获取证书)生成的密钥证书上传到JumpServer堡垒机,
并把第10步生成的URL地址,填写在“IDP metadata URL”中,即可完成JumpServer端的配置。

测试验证:Okta 端添加用户
- 登录 Okta,选择“Directory”→“People”→“Add person”;

2. 添加用户,填写用户信息;

3. 在用户列表里,选择用户

4. 为用户选择 Assign Applications

5. 选择创建的用于连接 JumpServer 的APP。

6. 设置登录 Okta的用户名。

7. 默认登录 JumpServer 会使用邮箱格式的用户名登录,如果想使用其他名字登录 JumpServer,可以在 Okta 的映射设置中修改。
8. 登录验证,选择 SAML2 进行登录。

9. 输入登录 Okta 的账号(创建用户时创建的).

10. 输入登录密码.

11. 默认还需要通过 Okta 验证码登录,需要下载 Okta Verify 程序来扫描绑定后,通过验证码登录。

12. 输入用户名,密码,验证码后,等待登录 SAML。

13. 登录成功。

四、OIDC-OpenID协议对接
对接步骤:Okta端
- 通过官网进入到Okta平台首页后,点击左边菜单栏中的“Applications”→“Applications”;

2. 点击“Create App Integration”按钮;

3. 选择“OIDC-OpenID Connect”选项,然后选择“Web Application”选项,点击“Next”按钮;

4. 根据以下图示填写相应内容,其余部分保持默认设置;
App integration name(Okta端应用名称):不重复即可;
Sign-in redirect URIs(认证成功回调地址):域名更换成自己的即可;
Sign-out redirect URIs(注销用户会话后的重定向地址):选填;


5. 跳转到应用信息详情页后,进入“Okta API Scopes”选项卡进行授权;

6. 在页面最底部找到okta.users.read,点击右侧“Grant”按钮完成授权动作,即可完成Okta端的对接设置。

对接步骤:JumpServer端
- 登录JumpServer后,选择“设置”→“认证设置”→“OIDC”,并根据下图填入相应参数,域名处更换为自己的Okta域名;

2. 在Okta端配置客户端ID(Client ID)及客户端密钥(Client Secret);

3. 按照下图设置相应信息,即可完成JumpServer端的对接设置。

