注意
本文档适用于 Ceph 的开发版本。
Keycloak 与 RadosGW 集成
如果将 Keycloak 设置为 OpenID Connect 身份提供商,则移动应用程序和 Web 应用程序可以使用它来对其用户进行身份验证。通过使用身份验证过程返回的 Web 令牌,移动应用程序或 Web 应用程序可以调用 AssumeRoleWithWebIdentity,接收一组临时 S3 凭证,并使用这些凭证进行 S3 调用。
设置 Keycloak
有关安装和操作 Keycloak 的文档可以在这里找到:https://keycloak.com.cn/guides。
配置 Keycloak 与 RGW 通信
要配置 Keycloak 与 RGW 通信,请添加以下可配置项
[client.radosgw.gateway]
rgw sts key = {sts key for encrypting/ decrypting the session token}
rgw s3 auth use sts = true
使用 Keycloak 获取 Web 令牌
Keycloak 身份验证应用程序的几个示例可以在这里找到:https://github.com/keycloak/keycloak-quickstarts/blob/latest/docs/getting-started.md。
在这里,您可以考虑 app-profile-jee-jsp 应用程序的示例(在上面的链接中)。要使用授权类型“client_credentials”为此类应用程序获取访问令牌(Web 令牌),可以使用 client id 和 client secret,如下所示
KC_REALM=demo
KC_CLIENT=<client id>
KC_CLIENT_SECRET=<client secret>
KC_SERVER=<host>:8080
KC_CONTEXT=auth
# Request Tokens for credentials
KC_RESPONSE=$( \
curl -k -v -X POST \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "scope=openid" \
-d "grant_type=client_credentials" \
-d "client_id=$KC_CLIENT" \
-d "client_secret=$KC_CLIENT_SECRET" \
"http://$KC_SERVER/$KC_CONTEXT/realms/$KC_REALM/protocol/openid-connect/token" \
| jq .
)
KC_ACCESS_TOKEN=$(echo $KC_RESPONSE| jq -r .access_token)
也可以使用授权类型“password”为特定用户获取访问令牌。要获取此类访问令牌,请使用 client id、client secret、username 和 password,如下所示
KC_REALM=demo
KC_USERNAME=<username>
KC_PASSWORD=<userpassword>
KC_CLIENT=<client id>
KC_CLIENT_SECRET=<client secret>
KC_SERVER=<host>:8080
KC_CONTEXT=auth
# Request Tokens for credentials
KC_RESPONSE=$( \
curl -k -v -X POST \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "scope=openid" \
-d "grant_type=password" \
-d "client_id=$KC_CLIENT" \
-d "client_secret=$KC_CLIENT_SECRET" \
-d "username=$KC_USERNAME" \
-d "password=$KC_PASSWORD" \
"http://$KC_SERVER/$KC_CONTEXT/realms/$KC_REALM/protocol/openid-connect/token" \
| jq .
)
KC_ACCESS_TOKEN=$(echo $KC_RESPONSE| jq -r .access_token)
KC_ACCESS_TOKEN 可用于调用 AssumeRoleWithWebIdentity:请参阅 Ceph 中的 STS。