# 开启应用 SAML Identity Provider 功能

# 注册一个 Authing 账号并新建一个应用

使用 Authing 云上的 SAML2 IdP 需要先注册一个 Authing 账号 (opens new window)新建一个应用 (opens new window)

# 创建一个应用

控制台 > 应用 > 应用列表,点击右侧的「创建应用」按钮。 创建应用

创建应用

在右侧弹出的抽屉中,输入相关信息,应用名称回调链接认证地址都可以随意填写。其余配置保持默认即可。点击「创建」。 创建应用

输入应用信息

# 启用 SAML2 Identity Provider 功能

找到刚刚创建的应用,点击「配置」。 配置应用

进入应用配置

点击「配置 SAML2 身份提供商」选项卡,然后点击「启用 SAML2 Provider」滑块,启用 SAML IdP。 启用 SAML

启用 SAML2 Provider

# 配置 SAML2 Identity Provider

默认 ACS 地址:SAML2 Identity Provider 默认会将 SAML Response 发送到 SAML Request 中指定的消费地址(哪里来的回到哪里去,你可以回到接入 SAML 章节查看 SAML Request,注意其中的 AssertionConsumerServiceURL,Authing 默认会将 SAML 身份断言发到这个地址),如果 SAML Request 中未指定消费地址,Authing 会将 SAML Response 发到此处填写的地址。你可以从 SP 处获取到这个地址并填入这里。如果在 SP 处找不到,不妨先随意填写一个,但某些 SP 不会在 SAML Request 中指定消费地址,这种情况下这里必须填写正确的地址

设置:SAML2 Identity Provider 的高级配置,需要填写一个 JSON 格式的对象,包含以下内容:

key 类型 描述 默认值
samlRequestSigningCert string SAML Request 验签证书,你可以从 SP 获得此证书内容。填写此字段后,会认为 SAML Request 经过签名,并检查签名是否合法。如果 SP 未对请求进行签名,会拒绝 SAML Request 导致认证失败 -
nameIdentifierFormat string SAML Response 中的唯一标识符格式。 urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
lifetimeInSeconds number SAML 身份断言的过期时间,单位为秒。 3600
authnContextClassRef string SAML 身份认证上下文 urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified
signatureAlgorithm string SAML 断言签名算法 http://www.w3.org/2001/04/xmldsig-more#rsa-sha256
mappings object 属性映射字典,Authing 用户信息中的字段映射到 SAML 身份断言中的映射字典,左侧的 key 代表用户在 Authing 中的信息字段右侧的 value 代表 SAML 身份断言中的属性名 默认不做字段映射
destination string SAML Response 中的 Destination 默认为 SAML Request 中的 AssertionConsumerServiceURL,如果不存在,就为配置的默认 ACS 地址
recipient string SAML Response 中的 recipient 默认为 SAML Request 中的 AssertionConsumerServiceURL,如果不存在,就为配置的默认 ACS 地址
audience string SAML Response 中的 audience 默认为 SAML Request 中的 AssertionConsumerServiceURL,如果不存在,就为配置的默认 ACS 地址
emailDomainSubstitution string 邮件域替换,SAML 断言中的身份标识中的邮箱域名会被替换为这里填写的内容,一些 SP 要求身份断言中的邮件域必须为特定的内容。如果填写此字段,必须禁止用户池注册,否则存在账号冒用风险。 -

示例

{
    "audience": null,
    "recipient": "https://signin.aliyun.com/saml/SSO",
    "destination": "https://signin.aliyun.com/saml/SSO",
    "mappings": {
      "email": "Email",
      "username": "UserName"
    },
    "digestAlgorithm": "http://www.w3.org/2000/09/xmldsig#sha1",
    "signatureAlgorithm": "http://www.w3.org/2000/09/xmldsig#rsa-sha1",
    "authnContextClassRef": "urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified",
    "lifetimeInSeconds": 3600,
    "nameIdentifierFormat": "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified",
    "samlRequestSigningCert": "-----BEGIN CERTIFICATE-----\nMIICyDCCAjGgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBgDELMAkGA1UEBhMCdXMx\nDTALBgNVBAgMBGFzZGYxDTALBgNVBAoMBGFzZGYxGDAWBgNVBAMMD2lkcDMuYXV0\naGluZy5jbjENMAsGA1UEBwwEYXNkZjENMAsGA1UECwwEYXNkZjEbMBkGCSqGSIb3\nDQEJARYMYXNkZkAxMjMuY29tMB4XDTE5MDUyNTA1NTgwMFoXDTIwMDUyNDA1NTgw\nMFowgYAxCzAJBgNVBAYTAnVzMQ0wCwYDVQQIDARhc2RmMQ0wCwYDVQQKDARhc2Rm\nMRgwFgYDVQQDDA9pZHAzLmF1dGhpbmcuY24xDTALBgNVBAcMBGFzZGYxDTALBgNV\nBAsMBGFzZGYxGzAZBgkqhkiG9w0BCQEWDGFzZGZAMTIzLmNvbTCBnzANBgkqhkiG\n9w0BAQEFAAOBjQAwgYkCgYEA2gggFHKUYkoEp83BfGgVjBiev+MIBm+AOuKVqIAX\naJDa1NHL+ApBWsfbKNoPPMy8sZdCBrDm6w5cx9cBjw4uBUap3elxr+MiFoCCc2Eg\nJundFhBVXkU6TafLzfoW4w6/yonmQ798nBKQrTmdc76tpT9xCwU2AmS5ooScQ9Xu\nNn0CAwEAAaNQME4wHQYDVR0OBBYEFMDHVJxYcOlCxnnRi1Lx4tj7gWKNMB8GA1Ud\nIwQYMBaAFMDHVJxYcOlCxnnRi1Lx4tj7gWKNMAwGA1UdEwQFMAMBAf8wDQYJKoZI\nhvcNAQEFBQADgYEAvDodW/ewvCEadY4PCFaBT0ZqoEvrb96hOrbP2hZV4lkCMbLq\noPWASgGTNr9TPnxGCvP9xOv77wzgLs7EAOI+ea1D+NIjUuKnjCLLBv034vMp8bRI\n/Ea9AsGqVCr8tK/3dPoJMxHIjs2cpqNdDcalCZkwBZ1Z0c0YtKIVDFnym5U=\n-----END CERTIFICATE-----",
    "emailDomainSubstitution": "authing.onaliyun.com"
}

自定义 SAML Response 属性: 你可以在 SAML 身份断言中加入一些自定义属性,新加入的属性会出现在 SAML 身份断言的 Attribute 中。

示例:

配置自定义 SAML Response 属性

配置自定义 SAML Response 属性

以上配置,会在 SAML 身份断言中增加以下属性:

<saml:Attribute Name="https://cloud.tencent.com/SAML/Attributes/Role" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
  <saml:AttributeValue
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">qcs::cam::uin/2165337796:roleName/authing,qcs::cam::uin/2165337796:saml-provider/authing
  </saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="https://cloud.tencent.com/SAML/Attributes/RoleSessionName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
  <saml:AttributeValue
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">Test
  </saml:AttributeValue>
</saml:Attribute>

你还可以从 Authing 的用户信息上动态读取字段,在一行中最右侧的文本框中输入:My email is ${user.email} and my gender is ${user.gender}动态读取用户信息字段

动态读取用户信息字段

该条内容会在 SAML 身份断言中增加以下属性:

<saml:Attribute Name="CustomName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
  <saml:AttributeValue
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">My email is yezuwei@authing.cn and my gender is M
  </saml:AttributeValue>
</saml:Attribute>