文章内容总结: 本文介绍了如何在Node.js应用程序中使用OpenID Connect(OIDC)和Passport进行身份验证。首先,通过配置Passport和OIDC策略,指定身份提供者(IDP)的URL、客户端ID和密钥等信息。然后,定义回调函数来查找或创建本地用户,并在用户成功认证后返回用户信息。接着,设置passport的序列化和反序列化用户函数。最后,配置Express应用程序使用会话,并定义路由处理登录和回调请求。文章强调了使用HTTPS、安全存储客户端密钥、验证ID令牌和使用短期访问令牌的重要性。 评价: 本文提供了一个清晰的指南,展示了如何在Node.js应用中集成OpenID Connect和Passport进行身份验证。代码示例和安全实践的强调使得文章既实用又具有指导性。
结果由AI生成
使用 OpenID Connect(Passport + OIDC)
const express = require('express');
const session = require('express-session');
const passport = require('passport');
const OpenIDConnectStrategy = require('passport-openidconnect').Strategy;
passport.use('oidc', new OpenIDConnectStrategy({
issuer: 'https://your-idp.example.com',
authorizationURL: 'https://your-idp.example.com/auth',
tokenURL: 'https://your-idp.example.com/token',
userInfoURL: 'https://your-idp.example.com/userinfo',
clientID: process.env.OIDC_CLIENT_ID,
clientSecret: process.env.OIDC_CLIENT_SECRET,
callbackURL: 'https://app.example.com/auth/callback',
scope: 'openid profile email'
}, function(issuer, sub, profile, accessToken, refreshToken, done) {
// 在这里查找或创建本地用户
const user = { id: sub, profile, accessToken, refreshToken };
return done(null, user);
}));
passport.serializeUser((u, cb) => cb(null, u));
passport.deserializeUser((u, cb) => cb(null, u));
const app = express();
app.use(session({ secret: 'replace-with-secure-secret', resave:false, saveUninitialized:false }));
app.use(passport.initialize());
app.use(passport.session());
app.get('/auth/login', passport.authenticate('oidc'));
app.get('/auth/callback', passport.authenticate('oidc', { failureRedirect: '/login' }), (req, res) => {
res.redirect('/');
});
用 HTTPS、把 client secret 存在安全的 secret manager、验证 ID Token(签名、issuer、aud、exp)并使用短期 Access Token
太帅了欧迪,我太爱你了,太有才华了,我要和你生猴子
打游戏就好好打游戏啊喂[