如何将 Keycloak 设置为 humhub 的身份验证提供程序

How to set Keycloak as authentication provider for humhub

我有一个本地 apache2 服务器 运行 humhub 1.3.14。 我的目标是将位于我的 rancher 集群上的 Keycloak 设置为 humhub 的身份验证提供程序。

选择 "keycloak OpenId Connect" 后,用户成功重定向到 keycloak 服务器。用户通过身份验证后,keycloak 重定向回我的本地 hummub 服务器。 humhub 抱怨说: "Unable to verify JWS: Unsecured connection"。 为了验证 JWS,humhub 使用 yii2-authclient/src/OpenIdConnect.php,它需要 "spomky-labs/jose:~5.0.6"(已被放弃,但 yii2 仍然使用它)。

在 humhub/protected/vendor/yiisoft/yii2-authclient/src/OpenIdConnect.php 设置

$validateJws = false 

什么都不做。

humhub/protected/config/common.php:

return [
'params' => [
    'enablePjax' => false
],
'components' => [
    'urlManager' => [
        'showScriptName' => false,
        'enablePrettyUrl' => false,
    ],
'authClientCollection' => [
        'class' => 'yii\authclient\Collection',
    'clients' => [
        'keycloak' => [
        'class' => 'yii\authclient\OpenIdConnect',
        'issuerUrl' => 'https://xxxx/auth/realms/humhub',
        'clientId' => 'humhub',
        'clientSecret' => 'xxxxxxx',
        'name' => 'keycloak',
        'title' => 'Keycloak OpenID Connect',
        'tokenUrl' => 'https://xxxx/auth/realms/humhub/protocol/openid-connect/token',
        'authUrl' => 'https://xxxx/auth/realms/humhub/protocol/openid-connect/auth',
        'validateAuthState' => 'false',
        'validateJws' => 'false',

        ],
    ],
    ]
]

];

有人可以帮忙吗? 需要更多信息?

更新


"spomky-labs/jose" 更新为 "spomky-labs/jose:~6.1.0" 后,humhub 的响应更改为:

"Unable to verify JWS: The provided sector identifier URI is not valid: scheme must be one of the following: ["https"]."

更新


我也在运行 humhub 的本地 apache2 服务器上启用了 https。 由于与当前 humhub 版本 1.3.14 的兼容性问题,我还将 spomky-labs/jose 降级回版本 5.0.6。 之后,JWS 错误似乎已修复,但出现了新错误:

莫非是 JWS 中的内容类型不是 "application/json" 而只是 ""(空)? 如果是这样,如何解决?

最后我找到了解决方案:它运行不佳,因为 humhub 没有在其 OIDC 适配器中保存规范。从 Keycloak 返回后,出现以下错误:

OpenId Connect 1.0 规范描述了必须使用 JWS(Json 网络签名)对 ID 令牌进行签名。 Keycloak 会这样做,但不会设置“cty”字段。至于 https://www.rfc-editor.org/rfc/rfc7515#section-4.1.10 (RFC7515),这个字段是可选的,这意味着 Humhub (v. 1.3.13) 有一个错误实现的 Open ID Connect 1.0 适配器,因为它将这个字段设置为强制性的。