我有一个运行 humhub 1.3.14 的本地 apache2 服务器。 我的目标是将位于我的 rancher 集群上的 Keycloak 设置为 humhub 的身份验证提供程序。
选择“keycloak OpenId Connect”后,用户成功重定向到 keycloak 服务器。用户通过身份验证后,keycloak 重定向回我的本地 humhub 服务器。 humhub 提示道: “无法验证 JWS:不安全的连接”。 为了验证 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 规范描述了 ID token 必须使用 JWS(Json Web 签名)进行签名。 Keycloak 会执行此操作,但不会设置“cty”字段。至于https://www.rfc-editor.org/rfc/rfc7515#section-4.1.10 (RFC7515),此字段是可选的,这意味着 Humhub (v. 1.3.13) 具有错误实现的 Open ID Connect 1.0 适配器,因为它将此字段设置为强制字段。
关于php - 如何将 Keycloak 设置为 humhub 的身份验证提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57242360/