Auth0 + JWT + NodeJS + Экспресс аутентификация конечного пользователя (логин) - PullRequest
0 голосов
/ 15 октября 2018

Почти год я переключаюсь на Auth0, чтобы управлять доступом моих клиентов к панели инструментов моего приложения.В настоящее время мне нужно реализовать доступ к API RESTFULL.

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

Я думал о создании токенов на панели инструментов илипросто используйте реализацию на стороне сервера для входа / аутентификации.Я сделал последний, используя доступ к своей собственной базе данных раньше и работал удивительно. Моя проблема в том, что я не совсем уверен, как это сделать для конечного пользователя, использующего Auth0 .

Кто-нибудь ранее реализовывал RESTfull API, который имеет логин с использованием Auth0, чтобыполучить токен JWT? Буду рад услышать ваши мысли.

1 Ответ

0 голосов
/ 16 октября 2018

Решением было использование другого подхода.

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

https://auth0.com/docs/api/authentication#resource-owner-password

Этот поток должен использоваться только издоверенные приложения, которые не могут выполнять перенаправления.Если вы можете использовать потоки на основе перенаправления из своих приложений, мы рекомендуем использовать вместо этого Предоставление кода авторизации.

router.post('/login', function (req, res, next) {
  var options = {
    method: 'POST',
    url: process.env.AUTH0_URL_OAUTH,
    headers: {
      'Cache-Control': 'no-cache',
      'Content-Type': 'application/json'
    },
    body: {
      grant_type: 'password',
      username: req.body.username,
      password: req.body.password,
      audience: process.env.AUTH0_AUDIENCE,
      scope: process.env.AUTH0_SCOPE,
      client_id: process.env.AUTH0_CLIENT_ID,
      client_secret: process.env.AUTH0_CLIENT_SECRET
    },
    json: true
  };

  request(options, function (error, response, body) {
    if (error) {
      res.sendStatus(500); //We could not connect to the service
    } else {
      if (body.error) {
        console.log(body);
        res.status(400);
        res.send({
          error: body.error_description // There was an error with the user or password
        });
      } else {
        console.log(body);
        /**
         * Everything went well. We return the JWT
         */
        res.send({
          access_token: body.access_token,
          expires_in: body.expires_in,
          token_type: body.token_type
        });
      }
    };
...