Passport.js: использование стратегии JWT с существующей стратегией Slack для аутентификации клиента - PullRequest
0 голосов
/ 02 октября 2018

Я создаю приложение для Slack с прикрепленным веб-интерфейсом / панелью инструментов команды.Встроенный узел, я изо всех сил пытаюсь заставить Slack auth и Client auth в одно плавное движение.

Я использую passport.js для аутентификации со Slack Strategy для аутентификации пользователей при использовании приложения в Slack (используя кнопку Войти с помощью Slack ).Этот обратный вызов Slack auth содержит всю необходимую пользователю информацию, поэтому я хочу использовать ее, чтобы также аутентифицировать пользователя для доступа к информационной панели его команды в веб-клиенте.Это где JWT вступает в игру.

Я впервые работаю с аутентификацией JWT, но теоретически есть смысл использовать стратегию JWT в паспорте для аутентификации для клиента.

Вот код для стратегии паспорта Slack, которая отлично работает:

<code>passport.use(
  new SlackStrategy(
    {
      clientID: process.env.SLACK_CLIENT_ID,
      clientSecret: process.env.SLACK_CLIENT_SECRET,
      scope: [
        'identity.basic',
        'identity.avatar',
        'identity.email',
        'identity.team',
        'users.list',
        'chat:write:bot',
      ],
      skipUserProfile: false,
    },
    (accessToken, scopes, team, extra, profiles, done) => {
      if (extra.bot != null) {
        Team.postTeamOnInstall(team, extra.bot.accessToken)
      } else {
        User.postUser(accessToken, profiles)
      }
      done(null, {})
    }
  )
)

app.get(
  '/auth/slack',
  passport.authenticate('slack', {
    scope: ['bot'],
  })
)

app.get(
  '/auth/slack/callback',
  passport.authenticate('slack', { session: false }),
  (req, res) => {
    // what if called JWT authentication here? that then redirects to the team dashboard
    res.redirect(`http://${process.env.BASE_URL}`)
  },
  (err, erq, res, next) => {
    res
      .status(500)
      .send(`<p>Think Fish failed to install</p> <pre>${err}
`)})

Теперь я следовал базовому учебнику длястратегия JWT .Так что мой код с этой стороны выглядит идентично этому.Я действительно просто хочу знать:

1) Кто-нибудь делал это или что-то подобное?Думаю ли я об этом правильный путь?Это возможно?

2) Если это так, как Стратегия Slack и Стратегия JWT могут общаться друг с другом, чтобы аутентифицировать пользователя для Slack и клиента одним движением ( Войти с помощью кнопки Slack )?

Я мог бы также чрезмерно спроектировать это, и вместо этого просто нужен какой-то способ для безопасного маршрута, чтобы проверить, вошел ли пользователь в Slack уже?

...