gpt4 book ai didi

node.js - Node express 与 OpenID 连接

转载 作者:行者123 更新时间:2023-12-03 12:11:43 25 4
gpt4 key购买 nike

我使用 this要使用的库 oidc使用 nodejs
我需要的是以下内容:

  • 用户使用用户密码登录,或者让数据已经在 session cookie 中。这是调用我的应用程序根路由 "/"
  • 我已经 已注册 该应用程序已在 authorisation server 中,认证服务器应该调用我的 app/redirect
  • 从身份验证服务器我拿了 clientId 和客户端密码 并将其放入应用程序中。
  • 当用户登录身份验证服务器时,应调用我的应用程序 重定向 路线 。
  • 来自 oidc我需要获取 tokenset.claims(); 的策略从它tokenset.id_token , 用户 token 。 , 在重定向调用中

  • 它应该与
    response_type: 'code',
    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');
    });
    我应该使用表单发布,最后,我需要从 tokenset 获取, user.id_token ?
    这是我已经验证过的!
    1. ClientID from auth server
    2. ClientSecret from auth server
    3. Config the auth server my app redirect path, which should called me after successful login
    4. I've also the aud key

    顺便说一句,在调试应用程序时它 没有 停止添加 handleCallback 函数,但它停止在 getUser首先应用程序,不确定可能是什么原因......

    最佳答案

    您似乎正在尝试从 req.session.userIdentity 中读取信息但你从来没有把它设置在任何地方。您正在设置 req.session.openidTokens反而。
    基于 example code ,您可能希望将 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();
    }

    关于node.js - Node express 与 OpenID 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63318349/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com