自定义 IdP OIDC 连接无法使用未知的 iss 值进行身份验证(下次身份验证)

问题描述 投票:0回答:1

我正在连接到符合 OIDC 标准的公司 ID 提供商。我遇到无法调试或解决的错误。

这是

auth.ts
中的配置:

providers: [
    {
      id: "idam",
      name: "acmeIDAM",
      type: "oidc",
      wellKnown: "https://idam.acme.com/oauth2/authorize/.well-known/openid-configuration",
      authorization: "https://idam.acme.io/oauth2/authorize",
      token: "https://idam.acme.io/oauth2/token",
      userinfo: "https://idam.acme.io/oauth2/userinfo",
      clientId: process.env.OIDC_CLIENT_ID,
      clientSecret: process.env.OIDC_CLIENT_SECRET,
      profile(profile, tokens) {
        console.log("oauth profile ", profile, " tokens: ", tokens);
        return {
          id: profile.id,
          name: profile?.name,
        };
      },
    },
  ],
  basePath: "/auth",
  callbacks: {
    authorized({ request, auth }) {
      const { pathname } = request.nextUrl
      if (pathname === "/middleware-example") return !!auth
      return true
    },
    jwt({ token, trigger, session, account }) {
      console.log(`jwt callback: ${token} ${trigger} ${account}`)
      if (trigger === "update") token.name = session.user.name
      if (account?.provider === "keycloak") {
        return { ...token, accessToken: account.access_token }
      }
      return token
    },
    async session({ session, token }) {
      console.log(`session callback: ${token} ${session}`)
      if (token?.accessToken) {
        session.accessToken = token.accessToken
      }
      return session
    },
  },
  experimental: {
    enableWebAuthn: true,
  },
  debug: process.env.NODE_ENV !== "production" ? true : false,
} satisfies NextAuthConfig

这会导致此错误:

[auth][原因]:OperationProcessingError:意外的 JWT“iss”(颁发者)声明值

但我无法弄清楚它的价值是什么。添加到配置中

issuer: "localhost:3000"
也不起作用。

我没有任何关于如何克服这个问题的帮助。

next.js openid-connect next-auth
1个回答
0
投票

错误是我没有正确匹配

issuer
值。 NextAuth 包阻止了由于值不匹配而返回的传入令牌。添加正确的发行人值解决了这个问题。该值对于您正在使用的每个 IdP 的设置来说都是唯一的,因此我必须使用我的公司系统检查我自己的身份验证应用程序才能弄清楚这一点。我一开始以为是
localhost:3000
,但事实并非如此:

例如,这是我的解决方案。

 {
      id: "idam",
      name: "acmeIDAM",
      type: "oidc",
      wellKnown: "https://idam.acme.com/oauth2/authorize/.well-known/openid-configuration",
      authorization: "https://idam.acme.io/oauth2/authorize",
      token: "https://idam.acme.io/oauth2/token",
      userinfo: "https://idam.acme.io/oauth2/userinfo",
      issuer: "https://idam.acme.io/t/myappname/oauth2/token"
      clientId: process.env.OIDC_CLIENT_ID,
      clientSecret: process.env.OIDC_CLIENT_SECRET,
     
      },
    },
    ```
© www.soinside.com 2019 - 2024. All rights reserved.