我想针对仅使用keycloak OIDC承载当前受保护的node-js(两个应用程序都属于同一领域)对旧版Java(6)应用程序进行身份验证。
有人告诉我使用keycloak-authz-client库解析密钥库OIDC JSON,如下所示
{
"realm": "xxx",
"realm-public-key": "fnzejhbfbhafbazhfzafazbfgeuizrgyez...",
"bearer-only": true,
"auth-server-url": "http://xxx:80/auth",
"ssl-required": "external",
"resource": "resourceName"
}
但是,keycloak Java客户端需要Java 8,而我当前的运行时是jre6。重新编译包含传递依赖项的库似乎不是一个好主意,我最终使用keycloak oauth2 REST端点。
据我所知,oauth2我将使用client_credentials流在应用程序初始化时与access_token交换一次客户端机密,并在过期时进行刷新/更新。
进入keycloak文档:
访问类型
这定义了OIDC客户端的类型。
机密
机密访问类型适用于需要执行浏览器登录并在将访问代码转换为访问令牌时需要客户端密码的服务器端客户端(有关更多详细信息,请参阅OAuth 2.0规范中的“访问令牌请求”)。此类型应用于服务器端应用程序。上市
公共访问类型适用于需要执行浏览器登录的客户端。使用客户端应用程序无法保持机密安全。相反,通过为客户端配置正确的重定向URI来限制访问非常重要。仅持票人
仅承载访问类型意味着应用程序仅允许承载令牌请求。如果启用此功能,则该应用程序无法参与浏览器登录。
似乎confidential
访问类型是一种适合我的需求(应该用于服务器端应用程序),但是我不知道它与浏览器登录的关系(这与使用第三方身份提供商进行身份验证有关) facebook和co)。
该confidential
客户端设置也需要URI的浏览器有效的重定向会成功登录或lagout后重定向到。由于我要认证的客户端是一个应用程序,因此我不明白这一点。
一般来说,我不了解整个访问类型。它是否仅与客户端有关,还是与资源所有者有关(我的node.js应用程序是否仅在现有客户端使用此访问类型时才保留在承载上?它会使用通过client_credentials流获得的access_token接受承载认证吗?我猜想是将)。
有人可以弄清楚keycloak OIDC访问类型以及我做错了哪里吗?
使用keycloak将旧应用程序的访问权委派给另一个应用程序的某些资源(不限于特定用户资源)的正确方法是什么?