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 SP 应用
  • 字段映射

Was this helpful?

  1. 认证
  2. 接入 SAML

创建 SAML Service Provider 应用

Previous创建 SAML Identity Provider 应用Next理解 SAML 流程

Last updated 5 years ago

Was this helpful?

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

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

创建 SAML SP 应用

打开应用控制台 -> 第三方登录 -> 社会化登录选项卡

滚动到页面下方,在 SAML Service Provider 区域,点击 ➕

在弹出的窗口中,输入应用信息,点击「创建应用」。

认证地址是本 SP 的云上地址,可以任意填写一个二级域名。

回调地址是完成 SAML 认证后,用户信息被发送到的地址,会以 query 的形式传递,key 为 data。

接下来需要填写一些 SP 的基础配置才能使 SP 正常工作。

IdP 登录 URL 由 IdP 提供,如果没有,可以从 IdP 元数据 XML 文档中查找。

<SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://idp.ssocircle.com:443/sso/SSORedirect/metaAlias/publicidp"/>
<SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://idp.ssocircle.com:443/sso/SSOPOST/metaAlias/publicidp"/>
<SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="https://idp.ssocircle.com:443/sso/SSOSoap/metaAlias/publicidp"/>

如果提供了多个 URL,建议填写 HTTP-Redirect 对应的 URL。并在后续使用 https://<domain>.authing.cn/oauth/saml/sp/<appId>/spinitsso-redirect 地址发起 SAML 登录。

IdP 登出 URL 由 IdP 提供,如果没有,可以从 IdP 元数据 XML 文档中查找。

<SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://idp.ssocircle.com:443/sso/IDPSloRedirect/metaAlias/publicidp" ResponseLocation="https://idp.ssocircle.com:443/sso/IDPSloRedirect/metaAlias/publicidp"/>
<SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://idp.ssocircle.com:443/sso/IDPSloPost/metaAlias/publicidp" ResponseLocation="https://idp.ssocircle.com:443/sso/IDPSloPost/metaAlias/publicidp"/>
<SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="https://idp.ssocircle.com:443/sso/IDPSloSoap/metaAlias/publicidp"/>

如果提供了多个 URL,建议填写 HTTP-Redirect 对应的 URL。登出时只需访问 https://<domain>.authing.cn/profile/logout完成 token 清除

IdP EntityID 由 IdP 提供,如果没有,可以从 IdP 元数据 XML 文档中查找。

<EntityDescriptor entityID="https://idp.ssocircle.com" xmlns="urn:oasis:names:tc:SAML:2.0:metadata">

IdP Metadata 是由 IdP 提供元数据 XML 文档,建议上传此配置文件,Authing 会优先应用此文件的配置。

接下来,需要配置一些 SP 对 IdP 的“要求”。

要求的用户唯一标识符形式 SP 可以要求 IdP 返回特定格式的用户唯一标识符。默认为 unspecified,会返回 persistent 类型的用户 Id。

例如,选择 persistent 时,IdP 会返回下面格式的用户 Id 类型

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

而设置为 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>

协议绑定 要求 IdP 通过 POST 请求,还是 GET 请求把 SAML Response 发到云上 SP 的 Assertion Consume Service 接口。一般使用 POST 并设为默认。

为什么可以在 SP 中配置 IdP 呢?因为 IdP 方可能会要求你上传 SP 的元数据 XML 文档,从而做出不同的行为。这里的配置会用来生成本 SP 的元数据文档。反之亦然。

不必担心,你无须关心这些 XML 的处理。云上的 SP 都会自动处理,最终返回到回调网站的是一串 JSON 格式的用户信息。

最后,有三个开关,分别用于验签、解密、签名。

验签 SAML Response

作为 SP,必须对 IdP 颁发的 SAML Assertion 验签从而提升安全性。输入或者从文件读入 IdP 签名证书,这样 SP 收到 SAML Assertion 后就会检验签名合法性,确保是真实的 IdP 颁发的断言,如果签名不正确,SP 会跳转到回调网址,错误信息以 query 的形式传递,不会返回用户信息。

<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

SP 可以要求 IdP 对 SAML Assertion 进行加密,SP 需要为 IdP 提供加密公钥,IdP 进行加密。SP 使用自己的私钥解密内容。打开开关,输入或从文件读入加密证书秘钥对,随后需要将公钥,或者 SP 元数据 XML 文档交给 IdP,在你的 IdP 提供商进行相应配置。

签名 SAML Request

SP 可以对发出的 SAML Request 进行签名,确保此 SAML Request 的发出者身份合法。IdP 可能通过 SAML Request 签名来判断请求来源,从而拒绝非法的 SALM Request 请求。

基础信息配置完成,点击确定。

字段映射

当 IdP 和用户完成了身份验证,IdP 会把用户信息放在 SAML Response 的 Assertion 中发给 SP。Authing 需要将其中的数据存入自己的数据库,这就需要字段对齐。Authing 需要知道 SAML Response 中的用户信息字段名称是什么,进行取出。Authing 内置了一些 IdP 的字段对齐配置,你需要从中选择你的 IdP 提供商。

如果找不到你的 IdP 提供商或内置的字段对齐方案不能满足需求,你可以使用自定义字段对齐配置

左侧是 Authing 数据库对应的字段,右侧是 Assertion 中的字段,你需要把 Assertion 中对应的字段名称填入对应的位置,以便 Authing 可以为你返回正确的 JSON 格式用户信息。

例如,对于以下 SSOCircle 返回的用户信息的 Assertion

<saml:AttributeStatement>
	<saml:Attribute Name="EmailAddress">
		<saml:AttributeValue
			xmlns:xs="http://www.w3.org/2001/XMLSchema"
			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">example@authing.cn
		</saml:AttributeValue>
	</saml:Attribute>
	<saml:Attribute Name="UserID">
		<saml:AttributeValue
			xmlns:xs="http://www.w3.org/2001/XMLSchema"
			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">example
		</saml:AttributeValue>
	</saml:Attribute>
	<saml:Attribute Name="FirstName">
		<saml:AttributeValue
			xmlns:xs="http://www.w3.org/2001/XMLSchema"
			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">vincent
		</saml:AttributeValue>
	</saml:Attribute>
	<saml:Attribute Name="LastName">
		<saml:AttributeValue
			xmlns:xs="http://www.w3.org/2001/XMLSchema"
			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">smith
		</saml:AttributeValue>
	</saml:Attribute>
</saml:AttributeStatement>

需要填的字段对齐内容为

IdP 名字:ssocircle,可以填任意名字

email:EmailAddress

username:FirstName

nickanme:FirstName

photo:不填,因为 Assertion 中无此信息

company:不填,因为 Assertion 中无此信息

如果你既没在列表中找到自己的 IdP 提供商,也不知道 IdP 返回的 SAML Response 是什么格式的,你需要去 IdP 提供商查看一下他们提供的 SAML Response 示例,来确定上面需要填写的字段。

完成设置后,点击确定,会展示一些使用提示。

到此 SAML Service Provider 创建完成。

此处需要上传或输入相应 IdP 的签名证书。IdP 可能会单独提供此证书,如果没有,可以从 IdP 的元数据 XML 文档中获取,注意对其进行。

输入或从文件读入证书内容,注意证书算法必须与选择的签名和摘要算法一致。如果你没有证书,可以从生成一个。

输入或从文件读入证书内容,注意证书算法必须与选择的签名和摘要算法一致。如果你没有证书,可以从生成一个。

格式化
这里
这里
注册一个 Authing 账号
新建一个应用
Authing 控制台
创建 SAML SP
应用信息
基础配置
SP 对 IdP 的“要求”
验签 SAML Response
加密 SAML Response
签名 SAML Request
内置 IdP 映射方案
配置字段映射,自定义方案
SAML SP 使用方法