Как передать секретный ключ в серверную часть (узел js) из внешнего интерфейса (угловой 4) с помощью JWT - PullRequest
0 голосов
/ 25 июня 2018

Я изучаю веб-приложение и только что начал с аутентификации jwt.

Я понимаю общий поток. Как jwt токены создаются бэкэндом и как веб-интерфейс извлекает данные, которые передаются в каждом последующем запросе.

Но в каждом онлайн-видео или учебном видео на YouTube упоминается, что нам нужна подпись для создания токена, который содержит секретный ключ, известный только клиенту. Но во всех руководствах переднего плана они посылают токен на предъявителя, где использование секретного ключа не показано.

Может кто-нибудь сказать мне, как передать секретный ключ вместе с токеном на сервер?

1 Ответ

0 голосов
/ 25 июня 2018

okey, давайте сначала поймем процесс аутентификации jwt. Прежде всего, секретный ключ генерируется в бэкэнде, как только пользователь впервые входит в систему, бэкэнд-сервер проверяет, существует ли пользователь, и в ответ на запрос входа в систему сервер.кодировать токен с помощью секретного слова и уникальной информации, связанной с пользователем, обычно это идентификатор пользователя и время проверки, когда срок действия токена истечет

 const payload = {
      sub: user.id,
      exp: moment().add(EXPIRATION_DAYS_NUMBER, CONSTANTS.TIME_UNITY).unix()
    }
    let token = jwt.encode(payload, CONSTANTS.JWT_SECRET)

после кодирования токена сервер отправляет его в ответезапроса на вход в систему клиентская сторона захватывает этот токен и сохраняет его в локальном хранилище. Теперь клиент должен использовать токен для любой будущей связи с сервером, требующей аутентификации при каждом вызове http, для которого требуется аутентификация, мы отправляем токен в заголовок, чтобы серверпроверит заголовок в промежуточном программном обеспечении и декодирует токен с тем же JWT_SECRT, чтобы узнать, является ли он действительным токеном или нет

middelware(req,res,next)
 let token = req.headers.authorization
  let payload = jwt.decode(token, CONSTANTS.JWT_SECRET)
  user.findOne({ id: payload.sub }).exec((err, user) => {
    if (err) return res.forbidden('not authorized')
    next()
  })

, а на стороне клиента мы можем использовать угловой перехватчик для установки токена вАЭМдер для всей связи с сервером

import { Injectable } from '@angular/core';
    import {
      HttpRequest,
      HttpHandler,
      HttpEvent,
      HttpInterceptor
    } from '@angular/common/http';
    import { Observable } from 'rxjs/Observable';
    @Injectable()
    export class TokenInterceptor implements HttpInterceptor {
      constructor( {}
      intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

        request = request.clone({
          setHeaders: {
            Authorization: `Bearer localstorage.getItem(token)}`
          }
        });
        return next.handle(request);
      }
    }

и внедрения Перехватчика в качестве провайдера в app.module

...