我们正在将 Entra ID(多租户)引入到我们的 Keycloak SSO 实例中。我们已使用 Keyclok 的 Open ID Connect 身份提供商设置对其进行了配置。
从截图中可以看出,我们已经按照微软的建议进行了配置。
仍然存在一个问题:我们认为从安全角度来看,发行人字段不应该为空,但不知道如何在 Keycloak 上实现这一点。
可以从微软提供的公钥中找到颁发者密钥:
https://login.microsoftonline.com/organizations/discovery/v2.0/keys
..其中包含值:
"issuer":"https://login.microsoftonline.com/{tenantid}/v2.0"
(也在他们的文档中)。
简而言之,当我们将发行者字段保留为空时,一切都会正常工作,但从安全角度来看,它很可能应该被填充?
似乎不可能将模板值放入发行者字段,我们已经尝试过例如:
- https://login.microsoftonline.com/{tenantid}/v2.0
- https://login.microsoftonline.com/${tenantid}/v2.0
- https://login.microsoftonline.com/organizations/v2.0
但是每次失败时都会显示以下消息:
Wrong issuer from token. Got: https://login.microsoftonline.com/<customer-tenant-id>/v2.0 expected: <our issuer uri we provided in keycloak's configuration>
还有其他人尝试过类似的方法吗?关于如何继续解决此问题有什么建议吗?我们如何动态发送颁发者验证以更正颁发者 URI?
需要澄清的是,我们的 SSO 中存在数量未知的 Entra ID 租户。
以逗号分隔的方式将颁发者添加到 IDP 配置中。并且验证将会通过。
https://login.microsoftonline.com/<customer-tenant-id-1>/v2.0, https://login.microsoftonline.com/<customer-tenant-id-2>/v2.0