Argon2 проверяет почти всегда верно при сравнении токенов JWTMySql

Форум по Mysql
Ответить Пред. темаСлед. тема
Anonymous
 Argon2 проверяет почти всегда верно при сравнении токенов JWT

Сообщение Anonymous »

Я используюnesjs на своем сервере, для аутентификации я использую логику на основе паспорта, и у меня проблема с токеном обновления. Я использую его только для обновления своих токенов доступа и обновления в методе replaceTokens и хэширую его с помощью argon2. У меня были проблемы с хешированием токена с помощью bcrypt, поскольку токен был слишком длинным, чтобы bcrypt мог его правильно хешировать, и при проверке он всегда возвращал true.

Код: Выделить всё

async refreshTokens(userId: number, rt: string, res: Response): Promise {
const admin = await this.adminService.findAdminById(userId)
if (!admin || !admin.refreshToken) throw new ForbiddenException('Access denied')

console.log(rt, 'service method')
const rtMatches = await argon2.verify(admin.refreshToken, rt)
if (!rtMatches) throw new ForbiddenException('Access denied')

const tokens = await this.createTokens(admin.id, admin.userName)
await this.updateRefreshToken(admin.id, tokens.refresh_token)
res.cookie('refresh_token', `${tokens.refresh_token}`, {
httpOnly: true
})
return {
access_token: tokens.access_token
}
}
В коде выше моего метода userId (извлекается из токена обновления в декораторе), чтобы найти администратор в базе данных, затем сравните значение токена обновления, сохраненного в базе данных с RT (который извлекается из файлов cookie, а затем передается в методе обновленных поток ), для сравнения используется argon2.verify () Метод.
Я использую почтальон Чтобы вызвать конечные точки. rtmatches возвращает true . Затем я проверяю свою базу данных MySQL и хэш токена обновления, изменившись.
и проблема возникает, когда я снова называю метод обновленных поток , используя первый токен, который был переписан новым токеном ранее и rtmatches < /code> значение должно быть false , но это правда. И я могу называть эту конечную точку бесконечно, и rtmatches всегда останется правдой.
Для получения дополнительного контекста:

Код: Выделить всё

async updateRefreshToken(userId: number, rt: string) {
const hash = await this.hashData(rt)
await this.adminService.updateRefreshToken(userId, hash)
}
async hashData(data: string) {
return await argon2.hash(data)
}
Если вам нужны более подробные данные, я с радостью их предоставлю, и извините, если у меня есть ошибки в объяснении. Я не являюсь носителем английского языка

Подробнее здесь: https://stackoverflow.com/questions/793 ... jwt-tokens
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Неразрешенный внешний символ LNK2019 при тестировании Argon2
    Гость » » в форуме C++
    0 Ответы
    64 Просмотры
    Последнее сообщение Гость
  • Laravel не проверяет подлинность токена JWT Tymon/jwt-auth
    Anonymous » » в форуме Php
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Laravel не проверяет подлинность токена JWT Tymon/jwt-auth
    Anonymous » » в форуме Php
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • Laravel не проверяет подлинность токена JWT Tymon/jwt-auth
    Anonymous » » в форуме Php
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Laravel не проверяет подлинность токена JWT Tymon/jwt-auth
    Anonymous » » в форуме Php
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

Вернуться в «MySql»