我们正在尝试将Keycloak评估为SSO解决方案,并且它在许多方面看起来都很好,但是文档在基础知识方面却很缺乏.
对于一个给定Keycloak安装http://localhost:8080/
的境界test
,有什么的OAuth2授权端点,OAuth2用户令牌端点和ID连接的UserInfo终点?
我们对使用Keycloak自己的客户端库不感兴趣,我们希望使用标准的OAuth2/OpenID Connect客户端库,因为使用keycloak服务器的客户端应用程序将使用多种语言编写(PHP,Ruby,Node,Java,C# ,Angular).因此,使用Keycloak客户端的示例对我们来说并不适用.
当我试图从我的api命中来从keycloak验证用户,但它给我错误无效参数:keycloak页面上的redirect_uri.除了大师,我创造了自己的境界.keycloak正在http上运行.请帮我.
Spring Boot 2.6.x 似乎引入了一些更改,导致之前与 Keycloak 的集成出现循环引用,从而阻止应用程序启动;它可以在当前的 2.5.x 版本中正常工作并启动。
\n明确地说,通过在spring-boot-starter-parent中将<version> 标记值从 2.5.7 更改为 2.6.1 之外的任何内容,都会出现下面详细说明的错误/消息。
\n当然,预期的行为是应用程序正常启动,并且像以前一样使用 Keycloak 进行保护。
\n实际的消息是:
\n***************************\nAPPLICATION FAILED TO START\n***************************\n\nDescription:\n\nThe dependencies of some of the beans in the application context form a cycle:\n\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80->\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n| keycloakSecurityConfig (field private org.keycloak.adapters.KeycloakConfigResolver org.keycloak.adapters.springsecurity.config.KeycloakWebSecurityConfigurerAdapter.keycloakConfigResolver)\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80<-\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n完整的堆栈跟踪:
\n2021-11-30 12:49:07.308 DEBUG 7 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : Application failed to start due to an exception\n\norg.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name \'keycloakSecurityConfig\': Requested bean is currently in creation: Is …
Run Code Online (Sandbox Code Playgroud) 我想使用Keycloak的授权系统创建一个相当简单的基于角色的访问控制系统.系统Keycloak正在替换允许我们创建一个"用户",他是一个或多个"组"的成员.在该遗留系统中,通过组成员资格(其中组被分配了权限)或直接向用户授予许可,给予用户"许可"以访问大约250个"能力"中的每一个.
我想将遗留系统映射到keycloak授权.
我应该很容易将现有系统中的每个"功能"映射到一个keycloak资源和一组keycloak范围.例如,"viewAccount"功能显然会映射到"帐户"资源和"视图"范围; 并且"viewTransaction"映射到"事务"资源......但最佳做法是创建一个"视图"范围,并在多个资源(帐户,事务等)中使用它?或者我应该创建"viewAccount"范围,"viewTransaction"范围等?
同样,我对权限有点困惑.对于资源和范围的每个实际组合,通常的做法是创建权限吗?如果有多个权限与给定的资源/范围匹配,Keycloak会做什么?我猜测Keycloak的意图是允许我配置针对资源和范围的权限矩阵,所以例如我可以获得访问"帐户"的权限和"查看"范围的权限,因此我有权限查看帐户?
我问,因为所有这些的结果似乎是我的旧"viewAccount"功能最终创建了一个"帐户"资源,具有"查看"范围和"viewAccount"权限,这似乎让我回到原来的位置.哪个好,如果是正确的.
最后,显然我需要一组策略来确定是否应该应用viewAccount.但我是对的,这意味着我需要一个用户可能属于的每个遗留组的策略吗?例如,如果我有"帮助台"角色,那么我需要一个"帮助台会员"政策,然后我可以将其添加到"viewAccount"权限中.它是否正确?
谢谢,
标记
我试图围绕bearer-only
Keycloak中客户的概念。
我了解公共与机密的概念以及服务帐户和其他grant_type=client_credentials
东西的概念。但是bearer-only
,我被卡住了。
谷歌搜索只显示讨论的片段说:
您无法通过
bearer-only
客户端从 keycloak 获取令牌。
文档也不清楚。他们只说:
不记名访问类型意味着应用程序只允许不记名令牌请求。
好的,如果我的应用程序只允许不记名令牌请求,如果我无法使用客户端 ID/客户端密码从 Keycloak 获取该令牌,我该如何获取它?
如果你不能获得令牌,你能得到什么?为什么会有这些客户?有人可以提供一个使用这种类型客户端的例子吗?
我有一个Keycloak受保护的后端,我想通过swagger-ui访问.Keycloak本身提供了oauth2隐式和accessCode流程,但我都没有工作.目前Keycloak的文档缺乏这一点,哪些url应该用于swagger.json中的authorizationUrl和tokenUrl.
Keycloak中的每个领域都通过访问http://keycloak.local/auth/realms/REALM/.well-known/openid-configuration提供了大量的配置URL列表.
此外,我试图通过添加以下行直接在swagger-ui index.html中集成keycloak js-client:
<script src="keycloak/keycloak.js"></script>
<script>
var keycloak = Keycloak('keycloak.json');
keycloak.init({ onLoad: 'login-required' })
.success(function (authenticated) {
console.log('Login Successful');
window.authorizations.add("oauth2", new ApiKeyAuthorization("Authorization", "Bearer " + keycloak.token, "header"));
}).error(function () {
console.error('Login Failed');
window.location.reload();
}
);
</script>
Run Code Online (Sandbox Code Playgroud)
"登录成功"后我也尝试了类似的东西
swaggerUi.api.clientAuthorizations.add("key", new SwaggerClient.ApiKeyAuthorization("Authorization", "Bearer " + keycloak.token, "header"));
Run Code Online (Sandbox Code Playgroud)
但它也行不通.
有什么建议我如何能够在swagger中集成keycloak auth?
我无法使用 ansible 和 docker-compose 启动 keycloak 容器。我收到错误:用户名“admin”的用户已添加到“/opt/jboss/keycloak/standalone/configuration/keycloak-add-user.json”
我有 3 个可靠的工作:
创建网络:
- name: Create a internal network
docker_network:
name: internal
Run Code Online (Sandbox Code Playgroud)
设置 postgres:
- name: "Install Postgres"
docker_compose:
project_name: posgressdb
restarted: true
pull: yes
definition:
version: '2'
services:
postgres:
image: postgres:12.1
container_name: postgres
restart: always
env_file:
- /etc/app/db.env
networks:
- internal
volumes:
- postgres-data:/var/lib/postgresql/data
- /etc/app/createdb.sh:/docker-entrypoint-initdb.d/init-app-db.sh
ports:
- "5432:5432"
volumes:
postgres-data:
networks:
internal:
external:
name: internal
Run Code Online (Sandbox Code Playgroud)
创建密钥斗篷容器:
- name: Install keycloak
docker_compose:
project_name: appauth
restarted: true
pull: yes
definition:
version: '2' …
Run Code Online (Sandbox Code Playgroud) 我正在创建一个angular.js Web应用程序,并寻找如何集成keycloak
到项目中.我已阅读并观看了许多教程,我发现其中大多数都有用户通过默认登录页面登录/注册keycloak
,然后重定向到应用程序.
我已经设计了自己的登录和注册页面,我想使用它.我如何使用它们而不是keycloak
默认值.有没有我可以调用的API,或者我的后端可能会这样做?我还看到有可用于keycloak的弹簧适配器,我可以使用它们吗?任何示例的任何链接都是好的.
我的第二个问题是在注册时我可以添加更多用户详细信息,例如地址,dob,性别keycloak
吗?因为我的注册页面需要这些信息.
在我的休息服务中,我可以在认证后使用获取主要信息
KeycloakPrincipal kcPrincipal = (KeycloakPrincipal) servletRequest.getUserPrincipal();
Run Code Online (Sandbox Code Playgroud)
声明.
Keycloak校长并不知道我需要有关经过身份验证的用户的所有信息.是否可以自定义我自己的主体类型?在keycloak-server-end上我开发了一个用户联合提供程序.我看到UserModel可以为我的用户添加一组自定义属性.
是否可以在该代码中插入我的自定义主体?
是否可以从keycloak principal检索此属性?
这是什么方式?
我正在尝试让 keycloak 的 REST API 正常工作。
感谢这篇文章,我能够获得令牌。但是,当尝试第一个答案中的用户列表示例时,我收到错误:
"error": "RESTEASY003210: Could not find resource for full path: http://PATHTOCEAKLOAK:81/auth/user/realms/master/users"
Run Code Online (Sandbox Code Playgroud)
这是我对邮差的要求:
由于我使用的是 Bitnami 容器,管理员称为用户,这就是为什么我使用/auth/user/而不是/auth/admin /
keycloak ×10
java ×2
jboss ×2
angularjs ×1
docker ×1
jboss-tools ×1
oauth ×1
permissions ×1
principal ×1
spring ×1
spring-boot ×1
swagger ×1
swagger-ui ×1