Права доступа к API-интерфейсу с использованием защиты express-jwt-permissions на node.js - PullRequest
1 голос
/ 04 июня 2019

Я пытаюсь использовать express-jwt-permissions для защиты маршрута API, и я не могу использовать синтаксис защиты "guard.check ('user')". Я успешно использовал express-jwt , на котором основывается express-jwt-permissions.

Интересным фактом является то, что express-jwt требует, чтобы ему был назначен JWT_SECRET, тогда как в документах express-jwt-permissions нет инструкции, чтобы понять это взаимодействие, или, возможно, отсутствует какой-то пример

Мой текущий код выглядит следующим образом:

/////////////////////////////////////////////
// auth.ts - Auth and set user permissions
/////////////////////////////////////////////
router.post('/', async (request, response, next) => {
    const {email, password} = request.body

    try {
        // Authenticate
        const user = await authenticate(email, password)
        user.permissions = ['user'] // set the express-jwt-permissions here

        // Create JWT token
        let token = jwt.sign(user.toJSON(), process.env.JWT_SECRET, {
            expiresIn: '60m'
        })

        let {iat, exp} = jwtDecode(token)

        // Respond with token
        response.status(HttpStatus.OK).send({iat, exp, token})


...

Я успешно получил токен JWT из конечной точки 'api / auth'.

{
    "iat": 1559650778,
    "exp": 1559654378,
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwZXJtaXNzaW9ucyI6WyJ1c2VyIl0sIl9pZCI6IjVjZjUyZjc1NDA4MTk0YWI1MGZlMWNkNiIsIm5hbWUiOiJHYXJ5IFBhbHVrIiwiZW1haWwiOiJnYXJ5QHBsdWdpbi5pbyIsInVzZXJuYW1lIjoiZ2FyeSIsInBhc3N3b3JkIjoiJDJhJDEwJEt1U1NUQXowd1MxNU5tRjRVQjZQb2VMTC5Ya1phZkc5Sm9xVkVRWnZZcHFkTFNrZXliTU1lIiwidXBkYXRlZEF0IjoiMjAxOS0wNi0wM1QxNDozMjoyMS4zMDlaIiwiY3JlYXRlZEF0IjoiMjAxOS0wNi0wM1QxNDozMjoyMS4zMDlaIiwiX192IjowLCJpYXQiOjE1NTk2NTA3NzgsImV4cCI6MTU1OTY1NDM3OH0.qnfH_OHq2YqaKCRIbwtw788SQC51F8PJESRCf3Nlrak"
}

Затем я попытался авторизоваться с помощью комбинаций Bearer Token, OAuth2, предварительно добавив токен с / без 'jwt' и т. Д., Но, похоже, ничто не минует защиту маршрута в 'api / registry'.

/////////////////////////////////////////////
// server.ts - API auth routes
/////////////////////////////////////////////
server.use(
    '/api/registry',
    guard.check('user'),
    require('./api/v1/registry')
)

server.use('/api/auth', require('./api/v1/auth'))


...

Результат:

{
    "name": "UnauthorizedError",
    "message": "user object \"user\" was not found. Check your configuration.",
    "code": "user_object_not_found",
    "status": 403,
    "inner": {
        "message": "user object \"user\" was not found. Check your configuration."
    }
}

Ожидаемым результатом будет то, что я смогу выполнить API-вызов к / api / registry с токеном JWT в качестве токена-носителя / OAuth2? и это должно позволить мне пройти охрану маршрута.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...