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
  • Pipeline 函数类型
  • 函数定义
  • callback 函数
  • 设置异步执行
  • Pipeline 函数示例

Was this helpful?

  1. 扩展能力
  2. 自定义认证流程(Pipeline)

Pipeline 函数开发指南

Pipeline 为一组函数,和普通 Hooks 的区别在于,Pipeline 整个流程中的函数数据可以相互传递,实现工业流水线一样的效果。这种设计模式,可以使得开发者的自定义函数更加模块化,便于管理。

处于安全考虑, Authing 会通过特殊方式,使用你的用户池 ID(userPoolId) 和用户池密钥(secret) 初始化 authing-js-sdk,此过程不会将你的用户池密钥发送到公网。你可以使用使用全局变量 authing,请勿再次初始化 SDK!

Pipeline 函数类型

目前 Authing 支持三种类型的 Pipeline 函数:

名称

说明

Pre-Register Pipeline

注册前 Pipeline,会在每次用户正式进入注册逻辑前触发,开发者可用此实现注册邮箱白名单、注册 IP 白名单等功能。

Post-Register Pipeline

注册后Pipeline, 会在每次用户完成注册逻辑之后触发(此时已经保存至数据库),开发者可用此实现往数据库写入自定义 metadata 、新用户注册 webhook 通知等功能。

Post-Authentication Pipeline

认证后 Pipeline 会在每次用户完成认证之后触发,开发者可用此实现往 token 加入自定义字段等功能。

Pre-OIDCTokenIssued Pipeline

开发者创建 Pipeline 函数时必须选择一种 Pipeline 类型。

函数定义

Pre-Register Pipeline 函数定义:

async function pipe(context, callback)

Post-Register Pipeline 和 Post-Authentication Pipeline 函数定义:

async function pipe(user, context, callback)

Pre-Register Pipeline 少了一个 user 参数,因为注册前无法确认此用户是谁。

pipe 函数支持 async / await 语法!

请勿重命名 pipe 函数!

参数说明:

参数

类型

说明

user

object

context

object

callback

function

回调函数,使用文档见下文。

callback 函数

定义:

function callback(error, user, context)

或:

function callback(error, context)

说明:

  1. callback 函数的第一个参数表示是开发者希望传给终端用户的 error,如果不为 null,整个认证流程将会中断,直接返回错误给前端。

  2. 如果第一个参数为 null ,请务必将最新的 user 和 context 传给 callback 函数,否则之后的 pipeline 函数将无法正常工作。

设置异步执行

设置为异步执行( 这里的异步非语言层面上 )的 pipeline 函数不会阻塞注册、登录、OIDC 流程的执行,callback 函数传入的参数对后续流程无影响,适用于进行异步通知的场景,比如飞书群通知、钉钉群通知、触发外部系统统计等。

如下图所示,勾选上此框表示让该 pipeline 函数异步执行:

Pipeline 函数示例

这里我们实现一个注册邮箱白名单的 Pre-Register Pipeline。

async function pipe(context, callback) {
  const email = context.data.userInfo.email;
  // 非邮箱注册方式, 跳过此 pipe 函数
  if (!email) {
    return callback(null, context)
  }
  
  // 如果域名邮箱不是 example.com, 返回 Access denied. 错误给终端。
  if (!email.endsWith("@example.com")) {
    return callback(new Error('Access denied.'));
  }
  return callback(null, context);
}

简要解释一下代码:

  • 2-6 行判断请求参数中是否包含 email, 如果有的话说明是邮箱注册方式。如果没有,直接跳过此 pipe 函数,调用 callback 的参数分别为 null 和 context(请勿忘记此参数!)。当然,如果你只是希望邮箱方式注册,这一步如果没有邮箱返回错误也是可以的 ~

  • 8-10 行判断邮箱域名是否为example.com,如果不是调用 callback 函数,第一个参数为 new Error('Access Denied.')。

  • 11 行,调用 return callback(null, context),接着进入下一个 pipe 函数,如果有的话。

Previous创建你的第一个 Pipeline 函数Next应用场景

Last updated 5 years ago

Was this helpful?

OIDC 应用 code 换 token 之前触发,开发者可用此实现往 idToken 中写入自定义字段等功能。OIDC 认证流程的 code 换 token 部分详情请见:。

当前请求用户。详细字段请见 。

请求认证上下文。详细字段请见 。

user 对象
context 对象
使用 OIDC 授权