在使用 Azure AD 作为 IdP 实现 GitLab SSO 时,如何调试“KidNotFound”错误?

在使用 Azure AD 作为 IdP 实现 GitLab SSO 时,如何调试“KidNotFound”错误?

我正在尝试将我们自行管理的 GitLab 15.9.3-ee 实例与 Azure AD 集成。使用 Azure AD 作为 GitLab 中 SSO 的 IdP,我一直在使用此处的文档:

https://docs.gitlab.com/ee/administration/auth/oidc.html

https://docs.gitlab.com/ee/integration/omniauth.html

https://docs.gitlab.com/ee/integration/azure.html

设置 OmniAuth 以使用 OpenIdConnect 访问我们login.microsoftonline.com开发 Azure Tennant 上的 V2 端点。所需的配置在omniauth_providers []各个文档之间略有不同,这是我当前使用的:

gitlab_rails['omniauth_enabled'] = true
gitlab_rails['omniauth_allow_single_sign_on'] = ["azure_activedirectory_v2"]
gitlab_rails['omniauth_auto_link_ldap_user'] = false
gitlab_rails['omniauth_block_auto_created_users'] = true
gitlab_rails['omniauth_auto_link_user'] = ["azure_activedirectory_v2"]


gitlab_rails['omniauth_providers'] = [
  {
    name: "azure_activedirectory_v2",
    args: {
      name: "azure_activedirectory_v2",
      strategy_class: "OmniAuth::Strategies::OpenIDConnect",
      scope: ["openid", "profile", "email"],
      response_type: "code",
      issuer:  "https://login.microsoftonline.com/6b72c6a7-3624-4c78-82ea-8901960e56c3/v2.0",
      client_auth_method: "query",
      discovery: true,
      uid_field: "preferred_username",
      send_scope_to_token_endpoint: "false",
      pkce: true,
      client_options: {
        identifier: "386481e3-7a0e-4ba3-b85c-d1baa1716276",
        secret: "nev8Q~bGETvJNqdm58__xGG.mZjmcfIsS69hZanZ",
        redirect_uri: "https://gitlab.dev.scalable.com/users/auth/azure_activedirectory_v2/callback"
      }
    }
  }
]

我可以在登录页面上看到 Azure 登录按钮,在 Azure AD v2 按钮GitLab-> User Dropdown-> Edit Profile-> Account-> Service sign-in中看到“连接到 Azure AD”按钮:。当我按下“连接”按钮时,Azure 日志会将身份验证记录为成功,但在 GitLab application.log 中,我收到错误Authentication failure! JSON::JWK::Set::KidNotFound

2023-05-24T14:40:28.421Z: (openid_connect) Request phase initiated.
2023-05-24T14:40:29.113Z: (openid_connect) Callback phase initiated.
2023-05-24T14:40:29.627Z: (openid_connect) Authentication failure! JSON::JWK::Set::KidNotFound: JSON::JWK::Set::KidNotFound, JSON::JWK::Set::KidNotFound

无论我使用的是azure_activedirectory_v2还是openid_connect回调,都会发生这种情况。我尝试了几个不同的uid_field: 值,例如:oid, sub, name, email, mail, preferred_username, user.name... 以及其他一些值。所以我想知道是否有任何更新的文档涵盖了从头开始的 Azure AD 设置,或者更好的调试信息来源?

或者我只是做错了什么事?

相关内容