我正在使用附带的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 Strategy和JWT Strategy相互交谈以使用户通过Slack和客户端进行一次流畅的身份验证(使用Slack登录按钮)?
我也可能对此进行了过度设计,而只是需要某种安全途径来检查用户是否已登录Slack?