本地 IdP

本文将向您展示如何为测试目的设置本地 SSO 身份提供程序 (IdP)。

这里使用 Docker Test SAML 2.0 Identity Provider。

先决条件

  1. Bitwarden 服务器已安装和配置,并运行以下服务器项目:

    • Identity

    • API

    • SSO(位于 server/bitwarden_license/src/Sso)

  2. 本地网络客户端正在运行

配置 IdP

1、打开本地网络密码库然后导航至「组织」→「设置」→「单点登录」

2、勾选「允许 SSO 身份验证」复选框

3、编写并输入一个 SSO 标识符

4、选择「SAML 2.0」作为 SSO 类型。先不要保存或退出此页面,稍后再回来查看

5、打开一个新的终端,导航至服务器存储库中的 dev 文件夹,例如

cd ~/Projects/server/dev

6、打开 .env 文件,根据网络密码库 SSO 配置页面上的「SP 实体 ID」和「断言消费者服务 (ACS) URL」值设置以下环境变量:

IDP_SP_ENTITY_ID=http://localhost:51822/saml2
IDP_SP_ACS_URL=http://localhost:51822/saml2/yourOrgIdHere/Acs

您应该已经在初始服务器设置期间创建了此 .env 文件。如果需要,您可以参考 .env.example 文件。

7、(可选)您可以生成证书来签署 SSO 请求。您可以使用为您选择的操作系统制作的脚本来完成此操作。

# Mac
./create_certificates_mac.sh

# Windows
.\create_certificates_windows.ps1

# Linux
./create_certificates_linux.sh

将指纹(例如 0BE8A0072214AB37C6928968752F698EEC3A68B5)粘贴到 globalSettings > identityServer > certificateThumbprint 下的 Secrets.json 文件中。按此处所示更新您的机密。

8、复制提供的 authsources.php.example 文件,其中包含您的 IdP 用户配置。

cp authsources.php.example authsources.php

默认情况下,该文件配置了两个用户:user1user2,并且都有密码password。您可以按照此格式添加或修改用户,或者仅使用默认值。有关自定义此文件的更多信息,请参阅此处

9、启动 docker 容器:

docker-compose --profile idp up -d

10、您可以通过导航至 http://localhost:8090/simplesaml,然后「身份验证」→「测试已配置的身份验证源」→「example-userpass」来测试用户配置。您应该可以使用配置的用户登录了。

配置 Bitwarden

1、回到打开 SSO 配置页面的窗口

2、在「SAML 身份提供程序配置」(SAML Identity Provider Configuration) 部分填写以下值:

  • 实体 ID:

http://localhost:8090/simplesaml/saml2/idp/metadata.php
  • 单点登录服务 URL:

http://localhost:8090/simplesaml/saml2/idp/SSOService.php
  • X509 公共证书:打开一个新标签页,导航到上述实体 ID URL,即可获得该证书。它将打开(或下载)一个 XML 文件。复制并粘贴 <ds:X509Certificate> 标记之间的值(它看起来应该像一个 B64 编码的字符串)

3、保存 SSO 配置

现在,您的 SSO 已准备就绪!

更新 IdP 配置

用户

要添加或更改用户,只需编辑 authsources.php。您的更改将立即生效,但当前已通过身份验证的用户必须退出登录,其账户更改才能生效。

要注销用户身份,请访问 http://localhost:8090/simplesaml/module.php/core/authenticate.php?as=example-userpass 然后点击「注销」。或者,您也可以使用私密浏览会话。

SAML 配置

要更改实体 ID 或 ACS URL,请编辑 .env 文件,然后重启 Docker 容器:

docker-compose --profile idp up -d

故障排除

Bitwarden 服务器显示 "unknown userId" 错误

authsources.php 中缺少用户的 uid 声明。

最后更新于