hapi-auth-jwt 认证插件配置

hapi JSON Web令牌(JWT)认证插件

JSON Web令牌身份验证需要验证签名的令牌。 'jwt'方案采用以下选项

  • <code>key</code> (必需)令牌与其签名的私钥
  • <code> validateFunc</code> (可选)验证和用户查找功能与签名功能<code>function(request, token, callback) </code>
    • <code>request</code> 是正在认证的请求的hapi请求对象
    • <code>token</code> 验证和解码的jwt令牌
    • <code>callback</code> 具有签名的回调函数 <code>function(err, isValid, credentials)</code>
      • <code>errr</code> 内部的错误
      • <code>isValid</code> 如果令牌有效则为<code>true</code>,否则为<code>false</code>
      • <code>credentials</code> 一个凭据对象在<code>request.auth.credentials</code>中传回给应用程序。通常,只有当<code>isValid</code>为<code>true</code>时才会包含凭据,但是在应用程序需要知道即使失败时也尝试进行身份验证的情况(例如使用验证模式“try”)的情况。
  • <code>verifyOptions</code> 设置来定义令牌由jsonwebtoken库进行验证
    • <code>algorithms</code> 具有允许算法名称的字符串列表,例如,<code>["HS256", "HS384"]</code>
    • <code> audience</code> 如果要查看观众(<code>aud</code>),请在此处提供一个值
    • <code> issuer</code> 如果你想检查发行人(<code>iss</code>),在这里提供一个值
    • <code> ignoreExpiration</code> 如果真的不验证令牌的到期。
    • <code> maxAge</code> 可选设置基于<code>iat</code>字段的到期。例如<code>2h</code>

请参阅示例文件夹中的可执行示例。

var Hapi = require('hapi'),
    jwt = require('jsonwebtoken'),
    server = new Hapi.Server();

server.connection({ port: 8080 });


var accounts = {
    123: {
        id: 123,
        user: 'john',
        fullName: 'John Doe',
        scope: ['a', 'b']
    }
};


var privateKey = 'BbZJjyoXAdr8BUZuiKKARWimKfrSmQ6fv8kZ7OFfc';

// Use this token to build your request with the 'Authorization' header.  
// Ex:
//     Authorization: Bearer <token>
var token = jwt.sign({ accountId: 123 }, privateKey, { algorithm: 'HS256'} );


var validate = function (request, decodedToken, callback) {

    var error,
        credentials = accounts[decodedToken.accountId] || {};

    if (!credentials) {
        return callback(error, false, credentials);
    }

    return callback(error, true, credentials)
};


server.register(require('hapi-auth-jwt'), function (error) {

    server.auth.strategy('token', 'jwt', {
        key: privateKey,
        validateFunc: validate,
        verifyOptions: { algorithms: [ 'HS256' ] }  // only allow HS256 algorithm
    });

    server.route({
        method: 'GET',
        path: '/',
        config: {
            auth: 'token'
        }
    });

    // With scope requirements
    server.route({
        method: 'GET',
        path: '/withScope',
        config: {
            auth: {
                strategy: 'token',
                scope: ['a']
            }
        }
    });
});


server.start();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容