【问题标题】:oidc-client authentication failure: sub from user info endpoint does not match sub in access_tokenoidc-client 身份验证失败:来自用户信息端点的 sub 与 access_token 中的 sub 不匹配
【发布时间】:2025-12-22 06:40:16
【问题描述】:

我有一个使用 oidc-client 访问 API 的 Angular 应用,该 API 使用 IdentityServer3 提供 OpenID Connect 身份验证。

在身份验证期间,oidc-client 会抛出错误:

sub from user info endpoint does not match sub in access_token

仅供参考,以下步骤已成功:

  • POST 到 API 的 /openid/login?signin=xxx
  • 重定向到 API 的/openid/connect/authorize
  • 重定向回 Angular 应用程序

但随后 oidc-client 调用了 API 的 /openid/connect/userinfo

API 没有实现 userinfo 端点,/openid/connect/userinfo 返回一个空对象:{}

然后 oidc-client 用上面的错误信息停止了整个事情。

oidc-client 中是否有一个选项可以跳过对 userinfo 端点的调用?还是 API 必须实现该端点?

【问题讨论】:

    标签: oidc-client-js


    【解决方案1】:

    oidc 将始终在内部调用 userinfo 来 verify 用户,因为默认情况下它被设置为 true 并通过查询 .well-known/openid-configuration 传入 access_token . 跳过这个也不是一个好主意。您的客户端应用程序是否在 IDP 上正确注册。

    查看下面控制 userinfo 端点的 oidc-client 选项配置:

    oidc-client-js

    • loadUserInfo(布尔值,默认值:true):用于控制是否从用户信息端点加载其他身份数据以填充用户配置文件的标志。

    【讨论】:

    • 谢谢! loadUserInfo 设置为 false oidc-client 没有发送 userinfo 请求。它跳到下一步,发送/openid/connect/checksession 请求。
    最近更新 更多