使用node-oidc-provider实现单点登录时授权页面死循环问题

通过AI生成代码,通过node-oidc-provider构建了本地的单点登录项目,使用自带的登录页面,整个登录过程很流畅

后来想着不用自带的登录页面,要自定义登录页面,于是接着让AI生成修改,页面顺利展示出来了,登录也成功了,但是在授权页面一直死循环了,就是说在授权页面点击了授权按钮之后,又进入了授权页面,整个出不去了

// 授权同意
    app.post('/interaction/:uid/confirm', async (req, res) => {
      const { uid } = req.params;
      const details = await oidc.interactionDetails(req, res);
      const { missingOIDCScope = [], missingOIDCClaims = [] } = details.prompt.details || {};
      const result = {
        consent: {
          rejectedScopes: [],
          rejectedClaims: [],
          grantScopes: missingOIDCScope,
          grantClaims: missingOIDCClaims,
          remember: true
        }
      };
      await oidc.interactionFinished(req, res, result, { mergeWithLastSubmission: true });
    });

这个就是AI生成的授权按钮的代码,反复询问AI,AI说这个写法是完全正确的,一直强调检查cookie 检查客户端 检查这个 检查那个

经过了多轮检查与对话,实在没得检查了,我心想,自定义之前是好的,自定义之后就死循环了,我要去看看默认的授权代码是怎么实现的,于是扒到了下面这个代码

于是我直接把代码拷贝过来了

app.post('/interaction/:uid/confirm', async (req, res) => {
  const {
    prompt: { name, details }, grantId, session, params,
  } = await provider.interactionDetails(req, res);
  let grant;
  if (grantId) {
    // we'll be modifying existing grant in existing session
    grant = await provider.Grant.find(grantId);
  } else {
    // we're establishing a new grant
    grant = new provider.Grant({
      accountId: session.accountId,
      clientId: params.client_id,
    });
  }

  if (details.missingOIDCScope) {
    grant.addOIDCScope(details.missingOIDCScope.join(' '));
  }
  if (details.missingOIDCClaims) {
    grant.addOIDCClaims(details.missingOIDCClaims);
  }
  if (details.missingResourceScopes) {
    for (const [indicator, scope] of Object.entries(details.missingResourceScopes)) {
      grant.addResourceScope(indicator, scope.join(' '));
    }
  }
  const result = { consent: { grantId: await grant.save() } };
  await provider.interactionFinished(req, res, result, {
    mergeWithLastSubmission: true,
  });
});

再次运行项目,不再死循环了

完整的单点登录项目:https://download.youkuaiyun.com/download/n_rts/91252072

评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

n_rts

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值