Ray*_*n D 7 openid node.js oauth-2.0 express openid-connect
我使用这个库oidc与 nodejs一起使用
我需要的是以下内容:
用户使用用户密码登录,或者让数据已经在会话 cookie 中。这是调用我的应用程序根路由"/"
我已经在 中注册了应用程序authorisation server,身份验证服务器应该调用我的app/redirect
我从身份验证服务器获取了clientId 和客户端机密并将其放入应用程序中。
当用户登录时,身份验证服务器应调用我的应用程序重定向路由。
从oidc策略,我需要得到的tokenset.claims();,并从它tokenset.id_token,用户令牌。, 在重定向调用中
它应该与
response_type: 'code',
Run Code Online (Sandbox Code Playgroud)
https://github.com/auth0/express-openid-connect#getting-started
问题是该getUser函数被调用(而调试应用程序),但是我得到了userIdentity来自req.session.userIdentity这undefined,任何想法可能是错在这里?
我们有相同的旧实现,它使用 OIDC,它适用于相同的身份验证服务器和客户端 ID 和密码。
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');
});
Run Code Online (Sandbox Code Playgroud)
我应该使用表单发布,最后,我需要的是从 tokenset, 中user.id_token?
这是我已经验证过的!
- 来自身份验证服务器的 ClientID
- 来自身份验证服务器的 ClientSecret
- 配置身份验证服务器我的应用程序
redirect路径,它应该在成功登录后调用我- 我也有
aud钥匙
顺便说一句,在调试应用程序时,它不会停止添加 handleCallback 函数,但它getUser首先在应用程序上停止,不确定可能是什么原因......
看起来您正在尝试读取req.session.userIdentity但从未将其设置在任何地方。你正在设置req.session.openidTokens。
根据示例代码,您可能需要将 handleCallback 函数修改为以下内容:
async handleCallback(req, res, next){
req.session.openidTokens = req.openidTokens;
console.log('---req.openidTokens', req.openidTokens);
req.session.userIdentity = req.openidTokens.claims(); // <-- this is required to make your code sample work
next();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2710 次 |
| 最近记录: |