Authing 知识库
🛠 开发资源🥂 集成案例🔭 常见问题🖥 控制台
3.0.0
3.0.0
  • 欢迎
  • Authing 概述
  • 快速开始
    • 注册 Authing 开发者账号
    • 第一个应用
    • 基础概念
    • 实现单点登录
    • 控制台概览
    • 部署模型和价格
    • 最佳开发实践
    • 我该如何选择 Authing 的技术
  • 进阶指南
    • 理解认证和授权
      • 用户名 - 密码认证
      • 邮箱 - 密码认证
      • 手机 - 验证码认证
      • JWT Token 释义及使用
    • 验证 Token
    • 配置用户权限
    • 迁移老数据进 Authing
    • 错误代码
  • 认证
    • 接入 OAuth 2.0
      • 创建 OAuth 应用
      • 使用 OAuth 授权
    • 接入 OpenID Connect
      • 创建 OIDC 应用
      • 使用 OIDC 授权
      • 理解 OIDC 流程
      • OIDC 常见问题
    • 接入 SAML
      • 创建 SAML Identity Provider 应用
      • 创建 SAML Service Provider 应用
      • 理解 SAML 流程
      • 同时使用 Authing 作为 SP 和 IdP
      • 使用 SAML Identity Provider
        • 在阿里云访问管理中使用
        • 在腾讯云访问管理中使用
        • 在 Auth0 中使用
      • 使用 SAML Service Provider
        • 与 Auth0 SAML IdP 对接
        • 与 SSOCircle SAML IdP 对接
    • 接入 LDAP
      • 配置 LDAP 服务
      • 使用 Authing 的 LDAP 用户目录
    • 接入 Active Directory
  • 社会化登录
    • 接入 Web 端社会化登录
      • GitHub 登录
      • 微信 PC 扫码登录
      • 微信 APP 内网页登录
      • 企业微信(第三方应用)网页授权登录
      • 企业微信(第三方应用)扫码登录
      • 企业微信(企业内部)扫码登录
      • 新浪微博登录
      • 钉钉登录
      • QQ 登录
      • 配置登录授权 Scope
    • 接入移动端社会化登录
      • 微信登录
      • 支付宝登录
    • 接入小程序登录
      • 小程序登录
        • 用户登录凭证(code)最佳实践
      • APP 拉起小程序登录
    • 打通微信账号体系
  • 扫码登录
    • 小程序扫码登录
      • 接入私有化小程序
    • APP 扫码登录
      • 快速接入
      • Web 端 SDK
      • 完整接口列表
      • 自定义配置项
      • 扫码登录原理
  • 移动应用登录
    • 移动应用 SSO
      • 自动检测登录
      • 唤起 App 登录
    • 移动应用身份提供商
  • 授权
    • Authorization 基础概念
      • 什么是基于角色的管理(RBAC)
      • 什么是基于属性的管理(ABAC)
      • 什么是零信任网络
    • Authorization at Authing
    • 接入 RBAC
    • 接入 ABAC
    • 接入组织机构管理
  • 扩展能力
    • 自定义认证流程(Pipeline)
      • 创建你的第一个 Pipeline 函数
      • Pipeline 函数开发指南
      • 应用场景
      • user 对象
      • context 对象
      • 使用环境变量
      • 可用的 Node Modules
      • 如何调试
      • Node SDK
      • GraphQL API
      • 常见问题
      • 私有化部署
    • 使用 Webhook
    • 自定义用户字段
  • 开发资源
    • 开发资源
    • API(GraphQL)
    • Guard for Web
      • 自定义 Guard 的 UI 样式
    • Guard for Mobile
      • Guard for React Native
    • Guard VS 自定义 UI
    • SDK for 单点登录
    • SDK for JavaScript
      • 查询用户权限
      • 绑定社会化登录
      • 自定义用户字段
      • 管理 MFA 口令
      • 自定义请求链接
    • SDK for Node.js
      • 权限控制
      • 查询用户权限
      • 组织机构管理
      • 老版权限控制(deprecated)
      • Pipeline 函数
      • 自定义用户字段
      • 绑定社会化登录
      • 管理 MFA 口令
      • 自定义请求连接
    • SDK for React Native
    • SDK for 微信小程序
    • SDK for Java
    • SDK for Objective-C
    • SDK for Python
    • SDK for Go
    • SDK for PHP
    • 函数计算(FaaS)
  • 通信
    • 邮件
    • SMS
  • MFA
    • 配置 MFA 安全口令
      • 使用 Microsoft Authenticator 添加 MFA 令牌
    • 接入 MFA
  • 安全
    • 配置 Web 安全域
    • 配置用户池密码强度
    • 配置密码加密函数
  • 其他
    • 常见问题
    • 集成案例
      • Authing 与 AWS 集成案例
      • 函数计算与 AaaS 集成案例
      • Odoo 集成案例
      • 社会化登录集成案例
    • 社交互联数据
    • 为 Authing 贡献 SDK
      • 了解 Authing 的模块
Powered by GitBook
On this page
  • 注册一个 Authing 账号并新建一个应用
  • 创建 SAML IdP 应用

Was this helpful?

  1. 认证
  2. 接入 SAML

创建 SAML Identity Provider 应用

Previous接入 SAMLNext创建 SAML Service Provider 应用

Last updated 5 years ago

Was this helpful?

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

使用 Authing 云上的 SAML SP 或 SAML IdP 需要先并。

创建 SAML IdP 应用

进入刚创建应用的控制台,点击第三方登录选项卡,在下方的的选项卡点击 SAML IdP,点击右侧「创建 SAML IdP」按钮。

在弹出的窗口中输入应用信息,认证地址处填写一个二级域名,作为 IdP 的云上地址。点击「创建应用」。

认证地址是本 IdP 应用的云上地址,这里可任意填写一个二级域名。

创建成功后,还需要填写一些 IdP 的基础配置才能使其正常工作。如果没有特殊需求,保留默认配置即可。

AssertionConsumeServiceURL 由 SP 提供,IdP 默认会将 SAML Response POST 发到这个 URL 地址。

支持的 bindings 本 IdP 支持接收 SAML Request 的方式,即允许 SP 通过 GET 或 POST 的方式传递 SAML Request 信息。

SP 以 GET 方式发送 SAML Request 👇

https://idp3.authing.cn/oauth/saml/idp/5ce8b87371c12a525243e4c8/SingleSignOnService?SAMLRequest=fZLNbtswEITveQqBd4n6bSTCUmDEKGAgaYu47aE3mlw7BKilSq7S9O1LqzaQIEhuxO585M4OVzfPo02ewAfjsGdFlrOb4WoV5GgnsZ7pER%2Fg9wyBkqjDIJZGz2aPwslggkA5QhCkxG59fyfKLBeTd%2BSUs%2BwF8jEhQwBPcYAz8rF6BJJakmTJ%2BsLdOgzzCH4H%2Fsko%2BPFw17NHoikIzpV1s84IUAFSptzIrTsa5KexWLKJ1gxKWtxfEKOnKpPRvMFjppC703kBTi3eKGj37XV1XaiilE3ZlHUFtWr5Luot7MwRv%2BJ5FJZsNz2bDs9d1RRayzKFHHQKsFfp%2FlPdpbrSbV3HG9t9dLQNYYYtBpJIPSvzokvzJi2773klikpU3S%2BW%2FLyEFZfBhiUqsXB%2BeON1xV%2B2z7F%2BiSvdbr45a9Tf5LPzo6T3N15kxVIxOj0sUjFjmECZgwEdI7DW%2Fbn1IAl6Rn4Gxof%2Fj77%2BPsPVPw%3D%3D

SP 以 POST 方式发送 SAML Request 👇

curl 'https://idp1.authing.cn/oauth/saml/idp/5ce2afd11c4f9813a24d214a/SingleSignOnService' -H 'Connection: keep-alive' -H 'Pragma: no-cache' -H 'Cache-Control: no-cache' -H 'Origin: https://sp1.authing.cn' -H 'Upgrade-Insecure-Requests: 1' -H 'Content-Type: application/x-www-form-urlencoded' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7' --data 'SAMLRequest=PHNhbWxwOkF1dGhuUmVxdWVzdCB4bWxuczpzYW1scD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnByb3RvY29sIiB4bWxuczpzYW1sPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXNzZXJ0aW9uIiBJRD0iX2U5NzFjOTg1LTE0YWUtNDFlZC1hMzRjLWJlNWRlOWE2ODY4MSIgVmVyc2lvbj0iMi4wIiBJc3N1ZUluc3RhbnQ9IjIwMTktMDUtMjlUMDM6MTc6NDUuMTAyWiIgRGVzdGluYXRpb249Imh0dHBzOi8vaWRwMS5hdXRoaW5nLmNuL29hdXRoL3NhbWwvaWRwLzVjZTJhZmQxMWM0Zjk4MTNhMjRkMjE0YS9TaW5nbGVTaWduT25TZXJ2aWNlIiBQcm90b2NvbEJpbmRpbmc9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpiaW5kaW5nczpIVFRQLVBPU1QiIEFzc2VydGlvbkNvbnN1bWVyU2VydmljZVVSTD0iaHR0cHM6Ly9zcDEuYXV0aGluZy5jbi9vYXV0aC9zYW1sL3NwLzVjZTAxMjU1ZTA3OThmZTZlZGY4MWIxNS9hY3MiPjxzYW1sOklzc3Vlcj5odHRwczovL3NwMS5hdXRoaW5nLmNuL29hdXRoL3NhbWwvc3AvNWNlMDEyNTVlMDc5OGZlNmVkZjgxYjE1L21ldGFkYXRhPC9zYW1sOklzc3Vlcj48c2FtbHA6TmFtZUlEUG9saWN5IEZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOm5hbWVpZC1mb3JtYXQ6cGVyc2lzdGVudCIgQWxsb3dDcmVhdGU9ImZhbHNlIi8%2BPC9zYW1scDpBdXRoblJlcXVlc3Q%2B&RelayState=' --compressed --insecure

支持的 NameID 格式 本 IdP 支持返回的用户唯一标识符格式。SP 可能要求 IdP 返回特定格式的用户唯一标识。

如果设置 IdP 支持 emailAddress 格式,当 SP 要求返回 emailAddress 格式的用户标识符时,会返回下面这样的

<saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" NameQualifier="https://idp.ssocircle.com" SPNameQualifier="https://sp1.authing.cn/oauth/saml/sp/5cc5a0a22e73be044ba7f649/metadata">services@authing.cn</saml:NameID>

默认会返回 persistent 格式的用户标识符

<saml:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent">authing|5cc32b28d6ebae2f240a9bfd</saml:NameID>

SAML Attribute 指定本 IdP 在返回的 SAML Response 中包含哪些用户信息。

用户信息返回示例

<saml:AttributeStatement>
  <saml:Attribute Name="email" 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">services@authing.cn
    </saml:AttributeValue>
  </saml:Attribute>
  <saml:Attribute Name="photo" 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">https://usercontents.authing.cn/authing-avatar.png
    </saml:AttributeValue>
  </saml:Attribute>
  <saml:Attribute Name="username" 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">test1
    </saml:AttributeValue>
  </saml:Attribute>
  <saml:Attribute Name="nickname" 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"/>
  </saml:Attribute>
  <saml:Attribute Name="identifier" 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">authing|5cc32b28d6ebae2f240a9bfd
    </saml:AttributeValue>
  </saml:Attribute>
  <saml:Attribute Name="provider" 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">authing
    </saml:AttributeValue>
  </saml:Attribute>
</saml:AttributeStatement>

SP Metadata 你的 SP 提供方会提供一份元数据 XML 文档,推荐上传此配置文件,Authing 会优先应用这里面的配置。

接下来配置一些 SAML Assertion 中的 Attributes 的配置。如无特殊要求,保持默认配置即可。

Assertion attributes 中的 Name 格式 影响 SAML Response 中 Attribute 的 Name。

设置为 Basic 时

  <saml:Attribute Name="username" 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">test1
    </saml:AttributeValue>
  </saml:Attribute>

设置为 URI 时

  <saml:Attribute Name="https://schemas.authing.cn/username" 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">test1
    </saml:AttributeValue>
  </saml:Attribute>

自定义 Attribute 用来设置 SAML Assertion 额外携带的属性,在编辑器中输入一个合法的 JSON 对象,key 为 Attribute 的 Name,value 为 XML 中对应的值。

认证上下文用来描述本 IdP 签发 Assertion 时和用户通信的状态,例如 Password-ProtectedTransport 代表用户是通过 https 和 idp 连接并认证。如果无特殊需求,保留默认即可。

最后配置一些加密、签名方面的设置

对 SAML Response 签名

要求 SAML Request 签名

IdP 可以要求 SP 对 SAML Request 签名。打开此开关后,IdP 收到 SAML Request 后会先验证签名,如果签名错误,会返回错误信息,而不会执行验证用户身份的流程。

<KeyDescriptor use="signing">
  <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    <ds:X509Data>
      <ds:X509Certificate>
        ... 输入这里的内容,先进行格式化 ...
      </ds:X509Certificate>
    </ds:X509Data>
  </ds:KeyInfo>
</KeyDescriptor>

加密 SAML Response

IdP 可以对 SAML Response 进行加密。打开此开关后,IdP 会将 SAML Response 进行加密处理,再返回给 SP。

<KeyDescriptor use="encryption">
  <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    <ds:X509Data>
      <ds:X509Certificate>
        ... 输入这里的内容,先进行格式化 ...
      </ds:X509Certificate>
    </ds:X509Data>
  </ds:KeyInfo>
</KeyDescriptor>

点击确定,会显示本 IdP 的一些使用信息。

到此完成了 SAML Identity Provider 的创建。

IdP 必须对每个 SAML Response 进行签名再返回给 SP,确保断言颁发者的身份合法性。选择签名算法和摘要算法,输入或从文件读入证书内容,注意证书算法必须与选择的签名和摘要算法一致。如果你没有证书,可以从生成一个。

此处需要上传或输入相应 SP 的签名证书。SP 可能会单独提供此证书,如果没有,可以从 SP 的元数据 XML 文档中获取,注意对其进行,保留首尾这些-----BEGIN CERTIFICATE----- 字样。

此处需要上传或输入相应 SP 的加密证书。SP 可能会单独提供此证书,如果没有,可以从 SP 的元数据 XML 文档中获取,注意对其进行。保留首尾这些-----BEGIN CERTIFICATE----- 字样。

这里
格式化
格式化
注册一个 Authing 账号
新建一个应用
Authing 控制台
IdP 基础配置
签名设置
验签 SAML Request
加密 SAML Response
使用方法