标签: keycloak

Keycloak:我可以为每个客户/用户/角色设置令牌的到期时间吗?

我正在设置keycloak来为某些服务提供保护.外部客户和内部服务将在我的服务上使用相同的端点.
我可以在用户或角色或客户端级别设置令牌到期,还是使用令牌和基本身份验证的混合?
谢谢!

keycloak

11
推荐指数
3
解决办法
3481
查看次数

微服务到微服务呼叫,来自队列消息的授权

背景:我正在创建一个支持SSO的多个应用程序的云平台.我正在使用Keycloak进行身份验证,使用Netflix Zuul通过Keycloak Spring Security Adapter 进行授权(API Gateway).

每个微服务都需要一个Authorization标头,其中包含一个有效的JWT,它将从中获取用户名(sub)来处理请求.每个微服务到微服务调用应首先通过Netflix Zuul,传递Authorization标头以维持无状态验证.该策略允许每个微服务器知道谁是间接调用微服务的用户(子).

问题/问题1:如果从队列消息中调用微服务会发生什么?我的一个想法是在队列中存储与消息+ userInfo相关的信息,并创建一个专用的微服务来处理这种消息,这种特殊的微服务应该从队列中读取userInfo并处理消息.

更新1:根据另一个论坛的电子邮件回复,将JWT存储在队列中并不是一个好主意,因为它可以轻松挖掘.

问题/问题2:但是,如果之前的特殊微服务想要调用另一个期望在头中接收JWT的普通微服务会发生什么?这个特殊的微服务是否应该由他自己创建一个JWT模仿用户并能够调用常规的微服务?

我认为另一种解决方案是将原始JWT存储在队列中,但是,如果队列稍后调用特殊微服务会发生什么?就在JWT不再有效(它已过期)之后,被调用的微服务将拒绝该请求?

可能的解决方案:(根据JoãoAngelo的讨论更新,见下文)

我应该验证来自我的用户(授权代码流)和我的服务(客户端凭证授权)的请求,这两个请求都应该包含有效负载中的用户信息.当请求来自用户时,我需要验证有效负载用户信息是否与JWT声明匹配.当请求来自服务时,我只需要信任该服务(只要它在我的控制之下).

我非常感谢你的帮助.谢谢.

spring-security jwt microservices keycloak netflix-zuul

11
推荐指数
1
解决办法
1792
查看次数

没找到publicKey for kid,Keycloak?

我在调用端点从angular js 2到widlfly服务器时遇到了这个异常"没有找到publicKey for kid".

验证发生在keycloak中,但是我使用相同的令牌在同一个域内调用来自不同客户端(不同的微服务)的8个端点,但是我只在这个微服务调用中得到了这个例外.

我确信用户拥有所有客户的所有角色.我还在JWT上解码了令牌来验证.

有时它工作,有时没有!这个异常堆栈跟踪:

Caused by: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
    at sun.security.validator.PKIXValidator.<init>(PKIXValidator.java:90)
    at sun.security.validator.Validator.getInstance(Validator.java:179)
    at sun.security.ssl.X509TrustManagerImpl.getValidator(X509TrustManagerImpl.java:312)
    at sun.security.ssl.X509TrustManagerImpl.checkTrustedInit(X509TrustManagerImpl.java:171)
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:184)
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124)
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1491)
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979)
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:914)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
    ... 55 more
Caused by: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
    at java.security.cert.PKIXParameters.setTrustAnchors(PKIXParameters.java:200)
    at java.security.cert.PKIXParameters.<init>(PKIXParameters.java:120)
    at java.security.cert.PKIXBuilderParameters.<init>(PKIXBuilderParameters.java:104)
    at sun.security.validator.PKIXValidator.<init>(PKIXValidator.java:88)
    ... 67 more

2017-06-09 00:33:35,994 ERROR [org.keycloak.adapters.rotation.AdapterRSATokenVerifier] (default task-445) Didn't find publicKey for kid: …
Run Code Online (Sandbox Code Playgroud)

java authentication jwt keycloak keycloak-services

11
推荐指数
2
解决办法
9816
查看次数

用户通过身份验证后的keycloak - CODE_TO_TOKEN_ERROR

我正在使用nodeJS keycloak适配器,到目前为止,我的客户端应用程序重定向到keycloak登录.

尝试登录时,我在keycloak日志中收到错误,如下所示:

12:07:12,341 WARN [org.keycloak.events](默认任务-30)type = CODE_TO_TOKEN_ERROR,realmId = myrealm,clientId = client-test,userId = xxx,ipAddress = xxx.xxx.xxx.xx,error = invalid_code ,grant_type = authorization_code,code_id = xxx,client_auth_method = client-secret

发送回我的快速应用程序的错误消息显示为"无法获取授权代码".

有人能说清楚这意味着什么吗?我只能认为我在我的realm\client\user设置中错误地配置了一些东西.

谢谢

openid keycloak

11
推荐指数
3
解决办法
6878
查看次数

从邮递员访问keycloak API

我试图从邮递员那里访问keycloak API.但它显示了400个不良请求.

我用以下格式打电话给api.

http://{hostname}:8080/auth/realms/master/protocol/openid-connect/token?username=admin&password=admin&client_id=admin-cli&grant_type=password
Run Code Online (Sandbox Code Playgroud)

在我设置的标题中 content_type as application/x-www-form-urlencoded

我得到的答复如下.

{
    "error": "invalid_request",
    "error_description": "Missing form parameter: grant_type"
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我.任何帮助将不胜感激.提前致谢

java postman keycloak keycloak-services

11
推荐指数
2
解决办法
1万
查看次数

如何在Keycloak中实现组成员身份JavaScript策略

一个2岁的keycloak用户列表问题没有答案:

  1. 有一个名为Project的受保护资源
  2. 和所有者 - 项目经理
  3. 每个项目经理只能访问自己的项目(仅限所有者的策略).
  4. 项目经理反过来向一个或多个投资组合经理报告.投资组合经理应该能够访问他/她的所有项目经理的项目(portforlio-manager策略).

让我们假设系统设计是灵活的,并且作为特定项目经理的投资组合经理的这个事实可以保留在Keycloak(但不是keycloak )内或客户端app本身.如何在Keycloak中将其作为基于JavaScrtipt的授权策略实现?我想这个请求可能会以某种方式注入此信息但无法从文档中找出来.

javascript keycloak

11
推荐指数
1
解决办法
462
查看次数

Keycloak社交登录休息api

我已经为我的 keycloak 实例启用了谷歌社交登录,但我需要将它用作休息服务。

是否有可用于执行此操作的端点?

java authentication rest keycloak

11
推荐指数
1
解决办法
871
查看次数

如何通过keycloak中的自定义属性获取用户?

我知道有管理 API 可以获取返回用户表示数组的用户列表。

GET /admin/realms/{realm}/groups/{id}/members
Run Code Online (Sandbox Code Playgroud)

返回

https://www.keycloak.org/docs-api/2.5/rest-api/index.html#_userrepresentation
Run Code Online (Sandbox Code Playgroud)

但是有没有办法通过自定义属性来获取用户?

keycloak

11
推荐指数
4
解决办法
1万
查看次数

如何从 Keycloak REST API 获取用户?

嗨,我正在尝试使用 Keycloak API,但我不太了解它是如何工作的。我想获取一个领域的所有用户。因此,我首先使用此端点获取令牌:/realms/master/protocol/openid-connect/token在请求正文中使用此参数:

  • 客户编号
  • 授权类型
  • 用户名
  • 密码
  • 客户秘密

第一个问题是:我应该使用什么客户端?

然后我调用这个端点:/admin/realms/master/users使用授权标头中的令牌,但我得到一个 403 状态代码,我不明白为什么。

谢谢

keycloak

11
推荐指数
2
解决办法
2万
查看次数

如何减少 Keycloak 中访问/刷新令牌的大小?

我正在设置一个 keycloack 身份验证服务器,以允许授权用户访问受保护的资源 (OAuth2.0)。

访问将通过具有某些限制的嵌入式设备完成。主要限制是访问和刷新令牌如果超过 256 个字符则无法保存。

虽然在OAuth 2.0 授权框架中对令牌大小保持沉默,但所有身份提供者都可以自由决定令牌大小。比如Facebook的token小于256字节,谷歌也是一样。但是对于 keycloack,我得到了一个大约 850 字节的令牌!我已经尝试了管理控制台中可用的几种加密算法,但我仍然得到一个很大的 jwt 令牌。解码 jwt 给出以下内容:

{
  "jti": "d654564qsd-5fqsdf5-4qsdf-8b25qs-b556456",
  "exp": 1556284611,
  "nbf": 0,
  "iat": 1556270211,
  "iss": "http://myadress:myport/auth/realms/myrealm",
  "aud": "myapp",
  "sub": "45464-445645-4b45641e-456456-45645646",
  "typ": "Bearer",
  "azp": "myapp",
  "auth_time": 1556269490,
  "session_state": "cb95519c-0bf8-4b6b-94e4-a10d9000dbd2",
  "acr": "0",
  "allowed-origins": [],
  "realm_access": {
    "roles": [
      "user"
    ]
  },
  "resource_access": {},
  "scope": "readwrite"
}
Run Code Online (Sandbox Code Playgroud)

我实际上对令牌中的数据根本不感兴趣,我也没有解析它。我只需要令牌就可以访问资源。因此,有没有办法将令牌的大小减少到小于 256?如果不是,我能得到的最好结果是什么?

先感谢您

token oauth-2.0 jwt keycloak

11
推荐指数
1
解决办法
2074
查看次数