OpenID是一种基于OAuth 2.0协议的身份验证标准,允许用户通过第三方身份提供者(如Google、GitHub等)进行单点登录(SSO),无需为每个Web服务单独创建账号。以下是关于OpenID的完整解析:
iat
)异常。aud
)未包含当前RP的Client ID。exp
和iat
时间戳。aud
与RP的Client ID一致。state
参数防止CSRF攻击。scope
是否包含openid
和profile
。userinfo
端点时传递有效的Token。const express = require('express');
const { Issuer, Strategy } = require('openid-client');
const app = express();
// 初始化OpenID客户端
async function initClient() {
const issuer = await Issuer.discover('https://OP的发现文档地址');
const client = new issuer.Client({
client_id: 'RP的Client ID',
client_secret: 'RP的Client Secret',
redirect_uris: ['https://RP的回调地址'],
});
// 配置路由
app.get('/login', (req, res) => {
const authUrl = client.authorizationUrl({
scope: 'openid profile email',
});
res.redirect(authUrl);
});
app.get('/callback', async (req, res) => {
const params = client.callbackParams(req);
const tokenSet = await client.callback('https://RP的回调地址', params);
const userinfo = await client.userinfo(tokenSet);
res.json(userinfo); // 返回用户信息
});
}
initClient();
app.listen(3000);
没有搜到相关的文章