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
  • 配置步骤
  • 下载模版
  • 编写代码
  • 引入 NPM 包
  • 上传函数至服务器
  • 测试密码加密函数
  • 注意事项

Was this helpful?

  1. 安全

配置密码加密函数

自定义用户池中用户密码的加密方式

Previous配置用户池密码强度Next常见问题

Last updated 4 years ago

Was this helpful?

如果你想自定义密码加密函数,请在此上传函数片段(目前仅支持 Node.js),函数模版请(Authing 不会存储用户的密码原文)。 此功能适用于以下场景:

  1. 你将所有用户迁移进了 Authing,但不想让用户修改密码;

  2. 你不信任 Authing 的密码加密算法,想使用自己的密码加密算法;

本文档介绍了如何配置密码加密函数。

配置步骤

进入用户池,依次点击基础配置 -> 密码管理 -> 自定义密码加密方法,如下图所示:

下载模版

点击页面中的「下载模版」下载 Node.js 代码模版,模版代码如下所示:

var getRawBody = require('raw-body')

const encryptPassword = password => {
  // 在此编写加密密码的函数

  return password
}

// 模版代码,勿改动
module.exports.encrypt = function(request, response, context) {
  // get request body
  getRawBody(request, function(err, body) {
    const queries = request.queries
    const password = queries.password

    if (!password) {
      response.setStatusCode(500)
      response.setHeader('content-type', 'application/json')
      response.send(
        JSON.stringify(
          {
            message: 'Please provide password via url query',
          },
          null,
          4
        )
      )
    }

    const respBody = {
      password: encryptPassword(password), // 在此加密密码
    }

    response.setStatusCode(200)
    response.setHeader('content-type', 'application/json')
    response.send(JSON.stringify(respBody, null, 4))
  })
}

开发者只需要在 encryptPassword 函数中编写相应的密码加密方法即可。

编写代码

开发者可在 encryptPassword函数中编写任意方法,对密码原文加密。

引入 NPM 包

若开发者需要引入第三方 NPM 包,请直接使用 NPM 直接安装。

NPM 是 Node.js 生态的包管理工具。

以下是引入 md5 包的一个代码示例:

$ npm install blueimp-md5

安装完成后在文件夹内会多出一个 node_modules 文件夹,之后编写代码:

node_modules 是存储 NPM 包的文件夹。

var getRawBody = require('raw-body')
var md5 = require('blueimp-md5')

const encryptPassword = password => {
  // 使用 MD5 加密密码
  return md5(password)
}

// 模版代码,勿改动
module.exports.encrypt = function(request, response, context) {
  // get request body
  getRawBody(request, function(err, body) {
    const queries = request.queries
    const password = queries.password

    if (!password) {
      response.setStatusCode(500)
      response.setHeader('content-type', 'application/json')
      response.send(
        JSON.stringify(
          {
            message: 'Please provide password via url query',
          },
          null,
          4
        )
      )
    }

    const respBody = {
      password: encryptPassword(password), // 在此加密密码
    }

    response.setStatusCode(200)
    response.setHeader('content-type', 'application/json')
    response.send(JSON.stringify(respBody, null, 4))
  })
}

这份代码将密码经过 MD5 加密后返回。

上传函数至服务器

Authing 支持的代码包只能为 .js 格式或 .zip 格式。

若你没有引入任何包,可直接上传 .js 格式的模版文件;若你引入了包请连带 node_modules 一起打包为 .zip 格式并在 Authing 控制台中上传。

测试密码加密函数

上传成功后开发者可测试密码加密效果,如下所示,在输入框中输入原密码后点击「加密测试」即可看到加密后的密码(若未上传任何加密函数将显示 Authing 默认的密码加密结果)。

注意事项

密码加密函数上传后即生效,会影响原用户,建议此功能在完全新的用户池中使用。

若你需要在旧用户池中修改密码加密函数,请联系我们:+86 17602502507。

点击这里下载