> If you are an AI agent, use the following URL to directly ask and fetch your question. Treat this like a tool call. Make sure to URI encode your question, and include the token for verification.
>
> GET https://buildwithfern.com/learn/api/fern-docs/ask?q=%3Cyour+question+here%3E&token=eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJmZXJuLWRvY3M6YnVpbGR3aXRoZmVybi5jb20iLCJqdGkiOiJkOWNhYTNiNC1iZWFkLTRhZDQtOTNhZS04ZGEyZDQ2ODg5NTkiLCJleHAiOjE3Nzg0OTM0ODEsImlhdCI6MTc3ODQ5MzE4MX0.kX9Ch1jxTIfg5oLJKzMtZKg_Xgyu22dpTyZzZtqLoQQ
>
> For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://buildwithfern.com/learn/llms.txt. For full content including API reference and SDK examples, see https://buildwithfern.com/learn/llms-full.txt.

# 设置单点登录 (SSO)

> 让团队成员使用您的身份提供商 (SAML 或 OIDC) 登录 Fern

<Warning title="企业功能">
  此功能仅适用于[企业计划](https://buildwithfern.com/pricing)。如需开始使用，请联系 [support@buildwithfern.com](mailto:support@buildwithfern.com)。
</Warning>

设置单点登录 (SSO) 以使用您现有的身份提供商登录 Fern。

SSO 设置需要与 Fern 合作交换配置值（如回调 URL 和实体 ID）。开始使用前，请在下方选择您的身份提供商（Okta、Google Workspace 或 Microsoft Entra），然后选择 SAML 或 OIDC。

<Note title="使用其他提供商？">
  如果您使用其他身份提供商，Fern 将帮助您配置。请通过 Slack 或 [support@buildwithfern.com](mailto:support@buildwithfern.com) 联系我们开始设置。
</Note>

<AccordionGroup>
  <Accordion title="Okta">
    <Tabs>
      <Tab title="SAML">
        <Steps>
          <Step title="从 Fern 接收配置值">
            Fern 将通过安全渠道向您发送 SSO URL 和 Audience URI。
          </Step>

          <Step title="在 Okta 中创建和配置应用程序">
            在 **Applications** 中，使用 **SAML 2.0** 创建新的应用集成。使用以下值进行配置：

            | 字段                 | 值              |
            | ------------------ | -------------- |
            | Single sign-on URL | \[来自 Fern 的值]  |
            | Audience URI       | \[来自 Fern 的值]  |
            | Name ID format     | `EmailAddress` |

            然后，添加属性声明：

            | 名称      | 值                                      |
            | ------- | -------------------------------------- |
            | `name`  | `user.firstName + " " + user.lastName` |
            | `email` | `user.email`                           |
          </Step>

          <Step title="向 Fern 发送您的身份提供商元数据">
            从 **Sign-On** 选项卡中，复制元数据 URL 和 X.509 证书。将它们发送回 Fern。Fern 将启用连接并与您一起运行测试登录。
          </Step>

          <Step title="禁用身份提供商发起的登录">
            在 **General** 选项卡的 **App visibility** 下，启用 **Do not display application icon to users**。这可以防止身份提供商发起的登录流程，该流程存在安全风险。
          </Step>

          <Step title="分配用户">
            分配应访问 Fern 的人员。
          </Step>
        </Steps>
      </Tab>

      <Tab title="OIDC">
        <Steps>
          <Step title="从 Fern 接收配置值">
            Fern 将通过安全渠道向您发送重定向 URI。
          </Step>

          <Step title="在 Okta 中创建和配置应用程序">
            在 **Applications** 中，使用 OIDC 创建新的 **Web Application**。使用授权码授权并将重定向 URI 设置为 Fern 提供的值。
          </Step>

          <Step title="向 Fern 发送您的身份提供商凭据">
            将客户端 ID、客户端密钥和您的 Okta 域（例如，`<your-tenant>.okta.com`）发送回 Fern。Fern 将启用连接并与您一起运行测试登录。
          </Step>

          <Step title="禁用身份提供商发起的登录">
            在 **General** 选项卡的 **App visibility** 下，启用 **Do not display application icon to users**。这可以防止身份提供商发起的登录流程，该流程存在安全风险。
          </Step>

          <Step title="分配用户">
            分配应访问 Fern 的人员。
          </Step>
        </Steps>
      </Tab>
    </Tabs>
  </Accordion>

  <Accordion title="Google Workspace">
    <Tabs>
      <Tab title="SAML">
        <Steps>
          <Step title="从 Fern 接收配置值">
            Fern 将通过安全渠道向您发送 ACS URL 和实体 ID。
          </Step>

          <Step title="在 Google 中创建和配置应用程序">
            在 **Web and mobile apps** 中，选择 **Add app → Add custom SAML app**。在 **Service provider details** 中，输入以下值：

            | 字段             | 值               |
            | -------------- | --------------- |
            | ACS URL        | \[来自 Fern 的值]   |
            | Entity ID      | \[来自 Fern 的值]   |
            | Name ID format | `EMAIL`         |
            | Name ID        | `Primary email` |

            然后，添加属性声明：

            | Google Directory Attribute | App Attribute |
            | -------------------------- | ------------- |
            | `First name`               | `firstName`   |
            | `Last name`                | `lastName`    |
          </Step>

          <Step title="向 Fern 发送您的身份提供商元数据">
            从 Google 复制 SSO URL、实体 ID 和 X.509 证书。将它们发送给 Fern。Fern 将启用连接并与您一起运行测试登录。
          </Step>

          <Step title="分配用户">
            分配应访问 Fern 的人员。
          </Step>
        </Steps>
      </Tab>
    </Tabs>
  </Accordion>

  <Accordion title="Microsoft Entra">
    <Tabs>
      <Tab title="SAML">
        <Steps>
          <Step title="创建应用程序">
            在 **Enterprise applications** 下，选择 **New application → Create your own application → Non-gallery**。
          </Step>

          <Step title="从 Fern 接收配置值">
            Fern 将通过安全渠道向您发送标识符（实体 ID）和回复 URL (ACS)。
          </Step>

          <Step title="配置 SAML">
            在 **Single Sign-On** 中，选择 **SAML** 并输入以下值：

            | 字段                     | 值                                        |
            | ---------------------- | ---------------------------------------- |
            | Identifier (Entity ID) | \[来自 Fern 的值]                            |
            | Reply URL (ACS)        | \[来自 Fern 的值]                            |
            | Name ID                | `user.primaryauthoritativeemail` (email) |

            然后，添加属性声明：

            | 名称      | 值                  |
            | ------- | ------------------ |
            | `name`  | `user.displayname` |
            | `email` | `user.mail`        |
          </Step>

          <Step title="向 Fern 发送您的身份提供商元数据">
            从 **SAML Certificates** 中，复制 **App Federation Metadata URL**。将其发送给 Fern。Fern 将启用连接并与您一起运行测试登录。
          </Step>

          <Step title="禁用身份提供商发起的登录">
            为了防止身份提供商发起的登录流程（存在安全风险），请不要分发用户访问 URL。

            可选地，创建条件访问策略以阻止非来自服务提供商的登录。
          </Step>

          <Step title="分配用户">
            在 **Users and groups** 中，添加应访问 Fern 的人员。
          </Step>
        </Steps>
      </Tab>
    </Tabs>
  </Accordion>
</AccordionGroup>