Authing 文档文档
快速开始
概念
使用指南
开发集成 arrow
  • V2 文档
  • V3 文档
元数据
应用集成
身份自动化
加入 APN
开发集成
多租户(内测版)
控制台文档
多租户控制台
租户控制台
Saas 应用 Demo
快速开始
概念
使用指南
开发集成 arrow
  • V2 文档
  • V3 文档
元数据
应用集成
身份自动化
加入 APN
开发集成
多租户(内测版)
控制台文档
多租户控制台
租户控制台
Saas 应用 Demo
旧版
使用指南
  • 快速开始

  • 对用户进行认证

  • 对用户进行权限管理

  • 用户自助服务

  • 授权

  • 自适应 MFA

  • 管理用户账号

  • 管理用户目录

  • 同步中心

  • 应用

  • 成为联邦认证身份源

  • 连接外部身份源(IdP)

  • 微信生态全场景能力

  • 迁移用户到 Authing

    • 使用 SDK 导入用户
    • 自定义密码加密方法
    • 从企业微信、钉钉等第三方身份源导入用户
  • 管理组织机构

  • 安全设置

  • 品牌化

  • 自动化

  • 审计日志

  • 设置

  • Authing 令牌
  • 私有化部署方案

  • 常见问题 FAQ

  1. 使用指南
  2. /
  3. 迁移用户到 Authing
  4. /
  5. 自定义密码加密方法

¶ 自定义密码加密方法

更新时间: 2025-02-18 09:00:47
编辑

如果你想自定义密码加密函数,请在此上传函数片段(目前仅支持 Node.js),函数模版请点击这里下载 (opens new window)(Authing 不会存储用户的密码原文)。

此功能适用于以下场景:

  1. 你将所有用户迁移进了 Authing,但不想让用户修改密码;
  2. 你不信任 Authing 的密码加密算法,想使用自己的密码加密算法;

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

¶ 配置步骤

路径:安全设置->密码安全->自定义密码加密方法

如下图所示:

自定义密码加密方法

¶ 下载模版

点击页面中的 下载模版 (opens new window) 下载 Node.js 代码模版,模版代码如下所示:

var getRawBody = require("raw-body");

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

  return password;
};

/**
 *
 * @param {String} password 明文密码
 * @param {String} encryptedPassword 密文密码
 */
const comparePassword = (password, encryptedPassword) => {
  // 在此编写校验密码的函数

  return password === encryptedPassword;
};

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));
  });
};

module.exports.validate = function (request, response, context) {
  // get request body
  getRawBody(request, function (err, body) {
    const queries = request.queries;
    const password = queries.password;
    const encryptedPassword = queries.encryptedPassword;

    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 = {
      isValid: comparePassword(password, encryptedPassword), // 在此校验密码
    };

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

¶ 编写代码

你需要在 encryptPassword 函数中编写相应的密码加密方法,以及在 vlidatePassword 函数中编写相应的验证密码加密方法。

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

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

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

$ npm install bcryptjs

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

var getRawBody = require("raw-body");

const encryptPassword = (password) => {
  // Implement your login here.
  // Your can use bcrypt for example
  // more info here: https://github.com/kelektiv/node.bcrypt.js
  var bcryptjs = require("bcryptjs");
  var genSaltSync = bcryptjs.genSaltSync();
  return bcryptjs.hashSync(password, genSaltSync);
};

const vlidatePassword = (plainText, encrypted) => {
  // plainText is the plainText password use provide to be validate.
  // encrypted is user's password encryped in database.

  // Implement your login here.
  // Your can use bcrypt for example
  // more info here: https://github.com/kelektiv/node.bcrypt.js
  var bcryptjs = require("bcryptjs");
  return bcryptjs.compareSync(password, encryptedPassword);
};

¶ 上传函数至服务器

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

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

¶ 测试密码加密函数

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

示例代码 (opens new window)

¶ 注意事项

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

若你需要在旧用户池中修改密码加密函数,请联系 Authing 售后服务人员。

上一篇: 使用 SDK 导入用户 下一篇: 从企业微信、钉钉等第三方身份源导入用户
  • 配置步骤
  • 注意事项

用户身份管理

集成第三方登录
手机号闪验 (opens new window)
通用登录表单组件
自定义认证流程

企业内部管理

单点登录
多因素认证
权限管理

开发者

开发文档
框架集成
博客 (opens new window)
GitHub (opens new window)
社区用户中心 (opens new window)

公司

400 888 2106
sales@authing.cn
北京市朝阳区北辰世纪中心 B 座 16 层(总)
成都市高新区天府五街 200 号 1 号楼 B 区 4 楼 406 室(分)

京ICP备19051205号

beian京公网安备 11010802035968号

© 北京蒸汽记忆科技有限公司