Я пытаюсь реализовать авторизацию на основе токенов в hapi.js , используя keycloack.Я создал идентификатор пользователя и клиента в keycloak.У меня есть несколько областей для каждого пользователя в моей настройке.Я генерирую токен, используя имя пользователя, пароль, идентификатор клиента.Затем я получаю доступ к этому токену, чтобы авторизовать каждый мой маршрут.Но проблема возникает, когда разные маршруты должны иметь разную область действия.Таким образом, только если этот пользователь в этой области, маршрут будет авторизован, иначе он не будет.Я использую hapi-auth-jwt2 для аутентификации.Вот часть моего кода:
server.js
await server.register(require('hapi-auth-jwt2'));
server.auth.strategy('jwt', 'jwt', await require('./authorization').authorize());
server.auth.default('jwt');
authorization.js
const jwk = require('./jwk');
exports.authorize = async () => {
let pem = await jwk.pem();
return {
key: pem,
validate: (decoded, request) => {
if (decoded.scope.includes('admin', 'user')) {
return { isValid: true };
} else {
return { isValid: false };
},
verifyOptions: { algorithms: [process.env.JWT_ALGORITHM] }
}
rout.js
//here the scope will be the only admin
method: 'GET',
path: '/getalluser',
config: {
handler: handler.getIDInfo,
validate: {
headers: joi.object({
authorization: commonSchema.jwtHeader,
}).options({ allowUnknown: true }),
},
},
//here the scope will be only user.
method: 'GET',
path: '/getmyinfo',
config: {
handler: handler.getmyinfo,
validate: {
headers: joi.object({
authorization: commonSchema.jwtHeader,
}).options({ allowUnknown: true }),
},
},
commonSchema.js
const jwtHeader = Joi.string().required();
const unauthorized = Joi.object({
statusCode: Joi.number().example(401),
error: Joi.string().example('Unauthorized'),
message: Joi.string().example('invalid or expired token'),
}).unknown(true);
}
в моем route.js я пытался добавитьэто authenticanticitoon для каждой области:
auth: {
strategy: 'jwt',
scope: ['admin']
Но я получил ошибку, которая была
AssertionError [ERR_ASSERTION]: неизвестная стратегия аутентификации jwt в / getalluser
Моя область настройки keycloack все в порядке.Но я запутался, как я могу использовать разные области действия на каждом маршруте при генерации токена для каждого пользователя?Прямо сейчас, мой весь маршрут работает для каждой области, которую я не хочу