返回介绍

server.auth.scheme(name, scheme)

发布于 2024-02-12 19:53:56 字数 2591 浏览 0 评论 0 收藏 0

注册身份验证方案:

  • name - 方案名称。
  • scheme - 用签名 function(server, options) 实现该方案 其中:
    • server - 一个参考方案被添加到服务器对象。
    • options - (可选的) 当实例一个策略时, 传给 server.auth.strategy()options 参数.

返回值: none.

当调用时, scheme 函数必须返回一个 authentication scheme object

身份验证方案

身份验证方案是具有以下属性的对象:

  • api - (可选) 通过 server.auth.api 公开的对象.

  • async authenticate(request, h) - (必要) 为使用身份验证方案配置的每个传入请求调用 lifecycle method 函数。 方法提供了两个特殊的工具包方法,用于返回经过身份验证或未经身份验证的方法结果:

    • h.authenticated() - 表示【indicate】请求已成功验证。
    • h.unauthenticated() - 表示请求验证失败.
  • async payload(request, h) - (可选) 用于验证请求有效负载的 lifecycle method 。

  • async response(request, h) - (可选) 一个 lifecycle method 用于写入响应头或有效负荷之前描述带有身份认证头的响应。

  • async verify(auth) - (可选) 用于验证提供的身份验证凭据的方法仍然有效 (例如初始身份验证后未过期或撤消) 其中:

    • auth - request.auth 对象包含 credentialsartifacts 对象,由 scheme's authenticate() 方法返回。
    • 当传递的凭据不再有效时,该方法抛出 Error (例如 过期或 撤销). 请注意,该方法无法访问原始请求,只能访问 authenticate() 方法生成的凭证和 artifacts。
  • options - (可选) 具有以下键的对象:

    • payload - 如果是 true ,则需要将有效负载验证作为方案的一部分,并禁止路由禁用有效负载验证。 默认为 false

当方案 authenticate() 方法实现抛出错误或调用 h.unauthenticated() 时, 错误的细节会影响是否尝试其他身份验证策略(如果为路由配置)。如果错误包含消息,则不会尝试其他策略。 如果 err 不包含消息但包含方案名称(例如 Boom.unauthorized(null, 'Custom') ),将按优先顺序尝试其他策略(在路由配置中定义)。 如果身份验证失败,方案名称将出现在 'WWW-Authenticate' header 中。

payload() 方法抛出错误消息时,这意味着有 payload 验证因负载不良而失败。如果错误没有消息但包含 scheme 名称(例如 Boom.unauthorized(null, 'Custom') ),如果路由 auth.payload 配置设置为 'optional' ,则认证可能仍然成功。

const Hapi = require('hapi');
const server = Hapi.server({ port: 80 });

const scheme = function (server, options) {

  return {
    authenticate: function (request, h) {

      const req = request.raw.req;
      const authorization = req.headers.authorization;
      if (!authorization) {
        throw Boom.unauthorized(null, 'Custom');
      }

      return h.authenticated({ credentials: { user: 'john' } });
    }
  };
};

server.auth.scheme('custom', scheme);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文