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