Passport.js:将JWT策略与现有的Slack策略结合使用以进行客户端身份验证

时间:2018-10-02 10:06:08

标签: node.js authentication jwt passport.js slack

我正在使用附带的Web界面/团队仪表板为Slack开发一个应用程序。内置节点,我正在努力使Slack身份验证和客户端身份验证成为一种流畅的动作。

我正在使用passport.js进行身份验证,并使用Slack Strategy来验证用户在Slack中使用该应用程序的身份(使用使用Slack登录按钮)。这个Slack auth的回调包含我需要的所有用户信息,因此我想使用它来对用户进行身份验证以访问Web客户端中其团队的仪表板。这就是JWT发挥作用的地方。

这是我第一次使用JWT auth,但从理论上讲,有一种方法可以使用护照的JWT策略为客户端进行身份验证。

这是护照松弛策略的代码,可以正常工作:

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}</pre>`)
  }
)

现在,我已遵循basic tutorial for the JWT strategy。因此,我在那方面的代码看起来与此相同。我真的只想知道:

1)是否有人这样做或类似?我在考虑正确的方法吗?这可能吗?

2)如果是这样,如何Slack StrategyJWT Strategy相互交谈以使用户通过Slack和客户端进行一次流畅的身份验证(使用Slack登录按钮)?

我也可能对此进行了过度设计,而只是需要某种安全途径来检查用户是否已登录Slack?

0 个答案:

没有答案