带有授权的 Keycloak 自定义 SPI REST 端点

Vya*_*nov 6 keycloak keycloak-services

我正在尝试使用自定义 REST 端点制作自定义 SPI,该端点应该通过评估对请求资源的权限来验证和授权传入请求。在调试器的帮助下,我发现我应该使用类 TokenEndpoint.java 并在我的 REST 处理程序方法中调用方法 permissionGrant(),但是当我尝试创建 TokenEndpoint 的实例时,我遇到了 REASTEASY 和 Keycloak 崩溃的错误。你有任何例子,我该怎么做?

小智 5

我建议看看以下项目:keycloak-avatar-minio-extension

首先,您必须实现 RealmResourceProdiverFactor 和 RealmResourceProdiver。

其次,您需要一个在 RealmResourceProvider 中的 getResource() 被触发时返回的资源。

您的资源是一个类,您可以在其中定义端点。要检查授权,您可以创建如下方法:

private AuthenticationManager.AuthResult resolveAuthentication(KeycloakSession session) {
    AppAuthManager appAuthManager = new AppAuthManager();
    RealmModel realm = session.getContext().getRealm();

    AuthenticationManager.AuthResult authResult = appAuthManager.authenticateIdentityCookie(session, realm);
    if (authResult != null) {
        return authResult;
    }

    return null;
}
Run Code Online (Sandbox Code Playgroud)

该方法在构造函数中调用,并private final AuthenticationManager.AuthResult auth;在资源中设置变量。

现在,在端点实现中,您可以简单地检查是否auth不为空,或者,如果需要,可以执行更复杂的操作,例如检查变量中可用的用户或令牌auth


VSh*_*VSh 0

尝试从文档中查看这些 java 示例。 https://www.keycloak.org/docs/latest/authorization_services/index.html#_authorization_quickstarts

  • 感谢您的回复,但我需要修改Keycloak本身而不使用Keycloak客户端。我需要自定义 REST 端点,如本例所示 https://www.keycloak.org/docs/latest/server_development/index.html#_extensions_rest 。我可以对用户进行身份验证,甚至获取他的角色,但我还需要授权才能获取资源权限(客户端设置中的“授权”选项卡)。 (2认同)