SSO

如何通过 SAML2 设置单点登录(SSO)。

SSO

单点登录(通过 SAML2)仅在 OpenReplay 企业版中可用。

身份提供商(IDP)配置

Section titled 身份提供商(IDP)配置

在你的身份提供商的控制面板中,创建一个名为 openreplay 的新应用(你可以使用此图标)。在配置页面中,请务必设置以下值(请务必将 YOUR_DOMAIN 替换为正确的值,例如 https://openreplay.mycompany.com):

变量
ACS URL(也称为 Single Sign On URL 或 Consumer URL)YOUR_DOMAIN/api/sso/saml2/acs/
Entity ID(也称为 Audience)YOUR_DOMAIN/api/sso/saml2/metadata/
Single Logout URL(也称为 SLO URL)YOUR_DOMAIN/api/sso/saml2/sls/(可选)
Name ID(有时可在 ‘Attribute Statements’ 或 ‘Parameters’ 部分进行配置)EmailEmailAddressurn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress,具体取决于你的身份提供商
SAML initiator将其设置为 Service Provider(可选)

在 ‘Attribute Statements’ 或 ‘Parameters’ 部分,请务必定义以下字段:

字段
tenantKeyTENANT_KEY 其值可在控制面板的 ‘Preferences’ > ‘Account’ 下找到(如果你使用我们的 Cloud Dedicated 套餐,则不得添加此属性)
firstNameuser.firstName
lastNameuser.lastName
internalId内部 ID 或 user.email(用户在你的身份管理系统中的 ID)(可选)
groups表示用户在 OpenReplay 中的角色和管理员权限,具体取决于你的身份提供商,它可以是 user.rolegroup 等(可选,默认 = member,无管理员权限)。为了简化从 IdP 端管理 OpenReplay 角色,你可以创建一个名为 OpenReplay-admin 的组,将拥有管理员权限的用户放入其中,并创建一个名为 OpenReplay-member 的组,将拥有 ‘member’ 角色的用户放入其中

现在你应该拥有下一步/部分所需的所有值。

如果你使用我们的 Cloud Dedicated 套餐,请前往控制台,然后点击实例并在 SSO 部分下设置变量。

否则,如果你运行的是我们的企业版,请运行 openreplay -e,取消注释并更新 chalice 部分中以下的环境变量:

变量描述
idp_entityId你的身份提供商的 entityId,也称为 Issuer URL
idp_sso_url你的身份提供商的 singleSignOnService,也称为 SAML 2.0 Endpoint (HTTP)
idp_x509certx509cert,必须是单行字符串,不含换行符。你可以使用此工具来格式化你的值
idp_name身份提供商的名称(可选)
idp_sls_url你的身份提供商的 singleLogoutService,也称为 SLO Endpoint (HTTP)(可选)
enforce_SSO如果设置为 true,所有使用用户名和密码的连接都将被阻止(可选,默认=false
idp_group_prefixesIdP 组名前缀(可选,默认=OpenReplay-,or-

然后,使用 :wq 保存并退出,使更改生效:

这是可选的,你可以添加 x509 证书以获得额外的 SSO 安全性:

  1. 在你的服务器或安全机器上运行此命令(你可以根据需要更改证书的有效期):
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout openreplay-sso.key -out openreplay-sso.crt
  1. 在你的服务器上,运行 openreplay -e
  2. chalice 部分下,添加以下环境变量:
  • sp_crt:必须是所生成的 ‘openreplay-sso.crt’ 文件的单行字符串,不含换行符(你可以使用此工具来格式化你的值)
  • sp_key:必须是所生成的 ‘openreplay-sso.key’ 文件的单行字符串,不含换行符
  1. 使用 :wq 保存并退出,使更改生效
  2. 将生成的 ‘openreplay-sso.crt’ 文件添加到你的身份提供商的应用配置中
  1. 登录你的 Okta 管理控制面板,前往 ‘Applications’ > ‘Applications’
  2. 按下 ‘Create new app integration’,然后选择 SAML 2.0 并按下 ‘Next’
  3. 将 ‘App Name’ 设置为 OpenReplay(你可以为你的应用上传此图标),然后按下 ‘Next’
  4. 设置:
  • Single sign on URLYOUR_DOMAIN/api/sso/saml2/acs/
  • Audience URI (SP Entity ID)YOUR_DOMAIN/api/sso/saml2/metadata/
  • Name ID formatEmailAddress
  1. 在 ‘Attribute Statements’ 中定义以下字段:
  • tenantKey:格式 Basic,并将值设置为 TENANT_KEY,可在 OpenReplay 控制面板的 ‘Preferences’ > ‘Account’ 下找到(如果你使用我们的 Cloud Dedicated 套餐,则不得添加此属性)
  • firstName:格式 Basic,并将值设置为 user.firstName
  • lastName:格式 Basic,并将值设置为 user.lastName
  • internalId:格式 Basic,并将值设置为 user.email
  1. 在 ‘Group Attribute Statement’ 中定义以下字段:
  • groups:格式 Basic,筛选器 Match Regex,值 OpenReplay-*(或者你可以根据需要指定不同的筛选器和正则表达式)
  1. 按下 Next,选择 ‘I’m an Okta customer adding an internal app’ 和 ‘This is an internal app that we have created’,然后按下 ‘Finish’
  2. 在 Sign On 选项卡中,向下滚动并按下 ‘View Setup Instructions’ 以查看你的 SAML2 配置

如果你使用我们的 Cloud Dedicated 套餐,请前往控制台,然后点击实例并在 SSO 部分下设置变量。

否则,如果你运行的是我们的企业版:

  1. 通过 SSH 连接到你的 OpenReplay 安装并运行 openreplay -e
  2. chalice 部分下,取消注释并设置以下环境变量:
  • idp_entityId:Identity Provider Issuer
  • idp_sso_url:Identity Provider Single Sign-On URL
  • idp_x509cert:X.509 证书,必须是单行字符串,不含换行符(你可以使用此工具来格式化你的值)
  • idp_name:Okta
  1. 最后,使用 :wq 保存并退出,使更改生效

使用 Azure Active Directory 的示例

Section titled 使用 Azure Active Directory 的示例
  1. 登录你的 Azure 门户并前往 ‘Azure Active Directory’
  2. 按下 ’+ Add’,选择 ‘Enterprise application’,然后点击 ‘Create your own application’
  3. 将 ‘App Name’ 设置为 OpenReplay,然后选择 ‘Integrate any other application you don’t find in the gallery (Non-gallery)’ 并按下 ‘Create’
  4. 导航到左侧菜单中的 ‘Single sign-on’,并在 ‘Basic SAML Configuration’ 块中设置以下值:
  • Identifier (Entity ID)YOUR_DOMAIN/api/sso/saml2/metadata/
  • Reply URL (Assertion Consumer Service URL)YOUR_DOMAIN/api/sso/saml2/acs/
  • Logout URLYOUR_DOMAIN/api/sso/saml2/sls/
  1. 在 ‘Attribute & Claims’ 块中添加以下 claims,并确保为每一个都将 ‘Namespace’ 字段留空:
  • tenantKey:将值设置为 TENANT_KEY,可在 OpenReplay 控制面板的 ‘Preferences’ > ‘Account’ 下找到(如果你使用我们的 Cloud Dedicated 套餐,则不得添加此属性/claim)
  • firstName:将值设置为 user.givenname
  • lastName:将值设置为 user.surname
  • internalId:将值设置为 user.mail
  1. 导航到 ‘Users and groups’,并将你选定的用户分配给该应用

如果你使用我们的 Cloud Dedicated 套餐,请前往控制台,然后点击实例并在 SSO 部分下设置变量(这些值可在 ‘Azure Active Directory’ > ‘OpenReplay’ > ‘Single sign-on’ 中找到)。

否则,如果你运行的是我们的企业版:

  1. 通过 SSH 连接到你的 OpenReplay 安装并运行 openreplay -e
  2. chalice 部分下,取消注释并设置以下环境变量(这些值可在 ‘Azure Active Directory’ > ‘OpenReplay’ > ‘Single sign-on’ 中找到):
  • idp_entityId:Azure AD Identifier
  • idp_sso_url:Login URL
  • idp_sls_url:Logout URL
  • idp_x509cert:X.509 证书,必须是单行字符串,不含换行符(你可以使用此工具来格式化你的值)
  • idp_name:Active Directory
  1. 最后,使用 :wq 保存并退出,使更改生效

使用 Google Workspace(前身为 G Suite)的示例

Section titled 使用 Google Workspace(前身为 G Suite)的示例
  1. 在 Google 管理控制台中,前往 ‘Directory’ > ‘Users’ > ‘More options’ > ‘Manage custom attributes’。
  2. 点击 ‘Add Custom Attribute’。
  3. 设置以下字段:
  • Category:‘OpenReplay’
  • Custom fields
  • Name:‘role’
  • Info type:‘Text’
  • Visibility:‘Visible to user and admin’
  • No. of values:‘Single-value’
  • Custom fields
  • Name:‘adminPrivileges’
  • Info type:‘Yes or No’
  • Visibility:‘Visible to user and admin’
  • No. of values:‘Single-value’
  1. 点击 ‘Add’
  2. 要为新的自定义属性添加值,请前往 ‘Users’
  3. 选择所需的用户
  4. 点击 ‘User information’,然后编辑 ‘OpenReplay’ 部分
  5. role 的值更改为 ‘OpenReplay’ 中所需的角色(该角色应与在 OpenReplay 控制面板的 ‘Preferences’ > ‘Roles’ 下创建的角色匹配)
  6. 如果允许用户在 OpenReplay 中拥有管理员权限,请将 adminPrivileges 的值更改为 ‘Yes’
  7. 点击 ‘Save’
  1. 登录你的 Google 管理控制台并前往 ‘Apps’
  2. 按下 ‘Web and mobile apps’,然后点击 ‘Add app’ > ‘Add custom SAML app’
  3. 将 ‘App name’ 设置为 OpenReplay(你可以为 ‘App icon” 上传此图标),然后按下 ‘Continue’
  4. 复制 ‘SSO URL’、‘Entity ID’ 和 ‘Certificate’,然后点击 ‘Continue’(我们将在第 11 步中使用这些值)
  5. 设置:
  • ACS URLYOUR_DOMAIN/api/sso/saml2/acs/TENANT_KEY/TENANT_KEY 可在 OpenReplay 控制面板的 ‘Preferences’ > ‘Account’ 下找到,但如果你使用我们的 Cloud Dedicated 套餐,请将 tenantKey 的值留空)
  • Entity IDYOUR_DOMAIN/api/sso/saml2/metadata/
  • Name ID formatEmail
  • Name IDBasic information > Primary Email
  1. 点击 ‘Continue’,然后点按 ‘Add Mapping’ 以添加以下属性:
  • Basic information > First Name -> firstName
  • Basic information > Last Name -> lastName
  • Basic information > Primary Email -> internalId
  • OpenReplay > groups -> groups
  1. 点击 ‘Finish’
  2. 在 Google 管理控制台中,前往 ‘Apps’ > ‘Web and mobile apps’ 并选择 ‘OpenReplay’
  3. 点击 ‘User access’,选择 ‘ON for everyone’,然后点按 ‘Save’

如果你使用我们的 Cloud Dedicated 套餐,请前往控制台,然后点击实例并在 SSO 部分下设置变量。

否则,如果你运行的是我们的企业版:

  1. 通过 SSH 连接到你的 OpenReplay 安装并运行 openreplay -e
  2. chalice > env 部分下,使用第 4 步中的值取消注释并设置以下属性:
  • idp_sso_url:粘贴 ‘SSO URL’ 的值
  • idp_entityId:粘贴 ‘Entity ID’ 的值
  • idp_x509cert:使用此工具来格式化所复制/下载的证书
  • idp_name:将值设置为 G-Suite
  • idp_tenantKeyTENANT_KEY 可在 OpenReplay 控制面板的 ‘Preferences’ > ‘Account’ 下找到
  1. 最后,使用 :wq 保存并退出,使更改生效
  1. 登录你的 JumpCloud 管理控制面板,在左侧菜单中前往 ‘SSO’
  2. 按下 ’+ Add New Application’,然后选择 ‘Custom SAML App’
  3. 将 ‘Display Label’ 设置为 OpenReplay(你可以为你的应用上传此图标),然后切换到 ‘SSO’ 选项卡
  4. 设置:
  • IdP Entity IDopenreplay/TENANT_KEYTENANT_KEY 可在 OpenReplay 控制面板的 ‘Preferences’ > ‘Account’ 下找到,但如果你使用我们的 Cloud Dedicated 套餐,请将 tenantKey 的值留空)
  • SP Entity IDYOUR_DOMAIN/api/sso/saml2/metadata/
  • ACS URLYOUR_DOMAIN/api/sso/saml2/acs/
  • SAMLSubject NameIDemail
  • SAMLSubject NameID Format:urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
  • Signature AlgorithmRSA-SHA256
  • 勾选 Sign Assertion
  • IDP URLopenreplay-TENANT_KEY 结尾(此值之后无法更改;如果你使用我们的 Cloud Dedicated 套餐,请将 tenantKey 部分留空)
  1. 如果你按照 OpenReplay 证书说明进行了操作,你可以通过按下 ‘Upload SP Certificate’ 来上传所生成的 ‘openreplay-sso.crt’ 文件,否则忽略此步骤
  2. 通过按下 ‘add attribute’ 按钮在 ‘USER ATTRIBUTE MAPPING’ 中定义以下字段:
  • firstName:将值设置为 firstname
  • lastName:将值设置为 lastname
  • internalId:将值设置为 email
  • groups:可选,用户在 OpenReplay 中的角色和管理员权限;如果对所有用户而言它是一个常量值,你应该在下一步中定义它,否则你必须向 JumpCloud 的组添加一个新的字符串属性,将其命名为 OpenReplay-groups 并将值设置为角色名称,然后在 SSO 配置中,选择 ‘Custom User or Group Attribute’ 并将值设置为 OpenReplay-groups
  1. 通过按下 ‘add attribute’ 按钮在 ‘CONSTANT ATTRIBUTES’ 中定义以下字段:
  • tenantKey:将值设置为 TENANT_KEY,可在 OpenReplay 控制面板的 ‘Preferences’ > ‘Account’ 下找到(如果你使用我们的 Cloud Dedicated 套餐,则不得添加此属性)
  • groups:可选,如果已在上一步中定义则忽略;用户在 OpenReplay 中的角色和管理员权限,应与 OpenReplay 中已定义的角色名称匹配(默认 = member,无管理员权限)
  1. 在此阶段,你可以切换到 ‘User Groups’ 选项卡,并选择将有权访问 OpenReplay 的用户组,或者你可以稍后再做
  2. 在确认弹窗中按下 ‘activate’ 和 ‘continue’
  3. 按下新的 OpenReplay 应用图标,然后在左侧下拉菜单 ‘IDP Certificate Valid’ 中选择 ‘Download certificate’

如果你使用我们的 Cloud Dedicated 套餐,请前往控制台,然后点击实例并在 SSO 部分下设置变量。

否则,如果你运行的是我们的企业版:

  1. 通过 SSH 连接到你的 OpenReplay 安装并运行 openreplay -e
  2. chalice 部分下,取消注释并设置以下环境变量:
  • idp_entityIdopenreplay/TENANT_KEY
  • idp_sso_urlhttps://sso.jumpcloud.com/saml2/openreplay-TENANT_KEY
  • idp_x509cert:所下载的证书,必须是单行字符串,不含换行符(你可以使用此工具来格式化你的值)
  • idp_name:JumpCloud
  1. 最后,使用 :wq 保存并退出,使更改生效

SCIM(System for Cross-domain Identity Management)预配

Section titled SCIM(System for Cross-domain Identity Management)预配

Openreplay 在企业版中支持预配用户身份的选项。

要与 Openreplay 的 SCIM 服务集成,只需在你的身份提供商控制面板中启用 SCIM 预配。请务必设置以下值,以实现顺畅的集成:

变量描述
SCIM connector base URLYOUR_DOMAIN/api/sso/scim/v2/
User unique identifier field nameemail
Support provisioning actionsPush new users, Push profile updates, Push groups
Authentication modeOAuth2
Access token endpointYOUR_DOMAIN/api/sso/scim/v2/token/
Authorization endpointYOUR_DOMAIN/api/sso/scim/v2/authorize/
Client idTENANT_KEY 其值可在控制面板的 ‘Preferences’ > ‘Account’ 下找到
Client secret其值可通过在你的 Postgres 数据库中执行此查询来找到:SELECT tenant_secret FROM tenants WHERE tenant_key = 'TENANT_KEY';

设置这些值后,请按照你的身份提供商控制面板中的提示来测试集成并授权该应用。

在此之后,你将能够使用 Openreplay 作为 SCIM 服务提供商来预配用户身份。

注意: 虽然 Openreplay 充当 SCIM 服务提供商,但它不支持将用户划分到多个组(即每个用户只能属于一个组)。如果不遵守这一点,那么用户可能会被分配到比预期更少或更多的项目,并且可能在 Openreplay 应用中拥有更少或更多的权限。

在你的 SAML 2.0 应用中,执行以下操作

  1. 点击 General 选项卡
  2. App Settings 部分中,点击 Edit
  3. Provisioning 字段中,选择 SCIM,然后点击 Save
  1. 点击 Provisioning 选项卡。SCIM 连接设置出现在 Settings > Integration 下。
  2. Settings > Integration 中,点击 Edit
  3. 指定上面提到的 SCIM connector base URL 以及你的用户唯一标识符的字段名称。
  4. Supported provisioning actions 下,选择上面提到的预配操作。
  5. Authentication Mode 下拉菜单设置为上面提到的值。
  6. 按上面所述设置 Access token endpointAuthorization endpointClient idClient secret
  7. 点击 Save
  8. 点击 Authentiate application
  9. Provisioning 选项卡中,点击 To App
  10. 点击 Edit,启用 Create UsersUpdate User AttributesDeactivate Users 并保存更改。
  • 在开始下一步之前,我们建议在 Okta 中创建新的组,名为 OpenReplay-admin(你在其中列出在 OpenReplay 中拥有管理员权限的用户)和 OpenReplay-members(你在其中列出在 OpenReplay 中拥有 member 角色的用户),…
  1. 前往 Push Groups 选项卡,点击 + Push Groups(按名称或按规则),选择你想推送到 OpenReplay 的组,然后按下 save
  • 此时,被推送的组代表 OpenReplay 中的角色和管理员权限,它不包含为 OpenReplay 预配的用户列表。
  1. 前往 Assignmets 选项卡,并以适合你的方式添加用户(使用人员或组)

响应在 http 而非 https 上收到

Section titled 响应在 http 而非 https 上收到

这种情况非常常见,是由于请求中不存在 ‘X-Forwarded-Proto’ 标头所致。为了解决这个问题,请确保负载均衡器正确地将该标头转发到 OpenReplay 后端,并运行 openreplay -e,在 ingress-nginx > config 部分下,取消注释 use-forwarded-headers: true 这一行。