文章内容总结: 本文介绍了如何在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
Тако лепа, Оди, ја сам тако тешко волим те, тако талентован, ја желим да стекнете са тобом обезьянку.
你也没放过我
Само играју игру и играју добро. Здраво [