【发布时间】:2020-11-28 18:26:28
【问题描述】:
我使用 this 库将 oidc 与 nodejs 一起使用
我需要的是:
-
用户使用用户密码登录,或者数据已经是会话 cookie。这是调用我的应用根路由
"/" -
我已经在
authorisation server中注册应用程序,身份验证服务器应该调用我的app/redirect -
我从身份验证服务器获取了 clientId 和客户端密码,并将其放入应用程序中。
-
当用户登录时,身份验证服务器应该调用我的应用程序 redirect 路由。
-
从
oidc策略我需要得到tokenset.claims();和tokenset.id_token,用户令牌。,在重定向调用
应该有
response_type: 'code',
https://github.com/auth0/express-openid-connect#getting-started
问题是调用了getUser 函数(在调试应用程序时)但是我从req.session.userIdentity 得到userIdentity,即undefined,知道这里可能有什么问题吗?
我们有相同的旧实现,它使用 OIDC,它适用于相同的身份验证服务器和 clientid 和 secret。
const { auth, requiresAuth } = require('express-openid-connect');
const session = require('express-session');
const bodyParser = require('body-parser');
module.exports = async (app) => {
const ClientId = process.env.CI;
const ClientSecret = process.env.CS;
const URL = process.env.S_URL;
app.use(session({
name: 'bat-auth',
secret: 'cookie-secret',
}));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(auth({
clientSecret: ClientSecret,
issuerBaseURL: `${URL}`,
clientID: ClientId,
baseURL: process.env.REDT_URL,
redirectUriPath: '/redirect', //my app redirect route
authorizationParams: {
response_type: 'code',
response_mode: 'form_post',
scope: 'openid',
},
async handleCallback(req, res, next) {
req.session.openidTokens = req.openidTokens;
console.log('---req.openidTokens', req.openidTokens);
req.session.userIdentity = req.openidTokens.claims();
next();
},
async getUser(req) {
return req.session.userIdentity;
},
}));
app.get('/', (req, res) => {
const tokenSet = req.openid.makeTokenSet(req.session.openidTokens);
console.log(`tokenset root: ${tokenSet}`);
res.send(req.isAuthenticated() ? 'Logged in' : 'Logged out');
});
app.get('/redirect', async (req, res) => {
const tokenSet = req.openid.makeTokenSet(req.session.openidTokens);
console.log(`tokenset: ${tokenSet}`);
console.log('redirect called');
res.send('redirect called');
});
我应该使用表单发布,最后,我需要从tokenset、user.id_token 获取?
这是我已经验证过的!
- 来自身份验证服务器的 ClientID
- 来自身份验证服务器的 ClientSecret
- 配置身份验证服务器我的应用程序
redirect路径,成功登录后应该调用我- 我也有
aud键
顺便说一句,在调试应用程序时,它不会停止添加 handleCallback 函数,但它首先在 getUser 应用程序上停止,不知道可能是什么原因...
【问题讨论】:
-
你能改进一下这个问题吗?你想达到什么目标?
-
@ToreNestenius - 按照我的要求,我用 stesp 更新了我的问题,现在更清楚了吗?如果有什么不清楚的地方请告诉我
-
redirectUriPath 不应该是:'/redirect'?前面有 /?当你应该使用绝对或相对 URL 时,你必须小心。我会检查使用 Fidder 之类的工具来捕获流量,然后在您的问题中添加失败的请求。
-
@ToreNestenius - 感谢您的提示,我也尝试了
'/redirect',但仍然遇到同样的错误,还有其他想法吗?我的其他配置看起来还可以吗? -
我会检查使用 Fidder 之类的工具来捕获流量,然后在您的问题中添加失败的请求。这样我们就可以更轻松地找出您在流程中卡住的位置。
标签: node.js express oauth-2.0 openid openid-connect