Как я могу проверить токен на предъявителя в swagger/nodejs

#javascript #node.js #api #swagger #swagger-ui

Вопрос:

Я использую swagger и добавляю auth сегодня. Но даже если я напишу какую-нибудь букву, например » а » или «азбука», или что там еще вводится. Как я могу проверить, является ли это верным токеном для использования swagger? Мой код:

 const options = {
  definition: {
    openapi: "3.0.0",
    info: {
      title: "İlaç Takip Sistemi API",
      version: "2.0.0",
      description: "ITS API Swagger",
    },
    servers: [
      {
        url: "http://localhost:3100",
      },
    ],
    components: {
      securitySchemes: {
        bearerAuth: {
          type: "apiKey",
          name: "x-auth-token",
          scheme: "bearer",
          in: "header",
        },
      },
    },
    security: [
      {
        bearerAuth: [],
      },
    ],
  },
  apis: ["./app/routes.js"],
};
const specs = swaggerJsDoc(options);
app.use("/swagger", swaggerUI.serve, swaggerUI.setup(specs));
 

Вот как я проверяю токен :

 jwt.verify(req.token, process.env.SECRETKEY, (err, authData) => {
      if (err) {
        res.sendStatus(401);
      } else {
        res.json(authData);
      }
    });
 

Комментарии:

1. не могли бы вы объяснить немного подробнее, что вы имеете в виду «напишите любую букву, например» а » или «азбука», или что она все еще вводится». Довольно трудно понять, чего вы здесь пытаетесь достичь.

2. @AritraChakraborty конечно, я могу объяснить, извините за мой плохой английский. Я добавляю авторизацию в swagger. Когда я открываю свою страницу swagger, я вижу символ авторизации. Когда я нажимаю на него, он запрашивает токен, например пароль. Я хочу добавить некоторую функцию управления. Например, когда кто-то вводит мой api swagger, я не хочу, чтобы они использовали его без моего токена. Но теперь, даже если вы введете несколько случайных букв, он все равно будет разблокирован для использования моих API. Его даже не проверяют, является ли параметр токеном или нет. Даже если вы напишете A и нажмете разблокировать, его все равно разблокируют без контроля. Я серьезно.

3. Вам нужно проверить токен на серверной части, а не в пользовательском интерфейсе Swagger. Диалоговое окно «Авторизация» пользовательского интерфейса Swagger не проверяет введенный токен по дизайну, чтобы вы могли проверять запросы, содержащие как действительные, так и недействительные токены (первый получит действительный ответ, второй получит ответ 401 — при условии, что у вас есть надлежащие проверки подлинности на серверной части).

4. @Helen спасибо за ответ! Но я уже проверяю это. Я отредактировал свой вопрос, вы можете видеть, как я его проверяю. Когда я пишу свой токен для swagger, тогда выполняю свои работы там, но когда я пытаюсь из swagger, он говорит, что даже мой токен является правдой и работает, пока я пытаюсь в postman.

5. Нужен ли вашему токену Bearer префикс? Если это так, измените свою схему безопасности на type: http и удалите in и name . (Так что это просто type: http scheme: bearer .) Решает ли это проблему?

Ответ №1:

Когда я пишу свой токен для swagger, то выполняю свои работы там, но когда я пытаюсь с помощью swagger, он говорит, что даже мой токен верен и работает, пока я пытаюсь в postman.

Измените свою схему безопасности следующим образом:

         bearerAuth: {
          type: "http",
          scheme: "bearer",
        },
 

Таким образом, префикс «Предъявитель» будет автоматически добавлен к токенам, которые вы вводите в пользовательском интерфейсе Swagger.

При использовании type: "apiKey" для аутентификации на предъявителя вам придется включить префикс «На предъявителя» в значение токена, то есть ввести токен, как Bearer abc123 в пользовательском интерфейсе Swagger.