在春季启动实施智威汤逊,JWE和JWS(签署JWT)与Keycloak(Implementing J

2019-10-31 05:11发布

我试图实现一个简单的OAuth2演示应用使用Spring引导和Keycloak为AuthService“客户端与签名JWT认证”。

我们的想法是:

  1. 一个安全的REST服务“的制作人”
    • 提供端点GET /人所有用户/与角色“read_person”校长
    • 提供端点POST /人所有用户/与角色“write_person”校长
  2. 另一个(无担保)REST服务“消费者”
    • 提供了一个enpoint / API开放给大家
    • 调用内部通路“生产者” Feign使用RequestInterceptor传递的accessToken客户机(签署JWT / JWS)

我看了一下文档:

http://www.keycloak.org/docs/latest/securing_apps/topics/oidc/java/client-authentication.html

他说:

一旦客户端应用程序启动时,它允许使用一个URL下载JWKS格式公共>键如http://myhost.com/myapp/k_jwks ,>假设http://myhost.com/myapp是基础客户端>应用程序的URL。 此网址可通过Keycloak使用(见下文)。

在认证过程中,客户端产生一个JWT令牌和体征其与>它的私钥和在特定的反向信道>请求在client_assertion>参数将其发送到Keycloak(例如,码到令牌请求)。

我用Google搜索了很多有关此主题的教程/演示或文档,但到目前为止还没有。 所以在这里我的问题:

  1. 如何实现这个“k_jwk”终点? 难道我简单的构建一个@RestController在“生产者”由我自己? 如何配置Keycloak让知道这个网址的?

  2. 如何实现我的“消费者”,以获得新的从Keycloak签署JWT?

更新中删除刺激性PS声明。

Answer 1:

  1. 你并不需要实现k_jwk终点,这是由适配器处理。 Keycloak默认会看看http:///your.app.com/k_jwk (但如果需要,您可以覆盖在控制台)。 然后,你需要配置你的春季启动客户端,只需要使用相同的属性keycloak.json但在application.properties格式:

    ...

    keycloak.credentials.jwt.client-密钥库文件=类路径:密钥库client.jks keycloak.credentials.jwt.client-密钥库型= JKS

    等等...

  2. 你需要一个令牌致电producer ,但如你所说的切入点将是一个insecured端点,所以你可能需要使用一个服务帐户用于此。

我希望这将有所帮助。



Answer 2:

更新

我想不出解决这个问题,但了解singned智威汤逊一些事情的平均时间:

  1. 通过创建具有所有必要的索赔(分,NBF,EXP ......)自己的JSON结构创建一个所谓的“承载令牌”,并签署与您的JKS /从Keycloak私钥/证书吧。 有Keycloak身边一些漂亮的第三方库来做到这一点。

  2. 为了从Keycloak得到一个真正的accessToken(JWE / JWS):发送此静态最终承载令牌在/认证/境界/ $境界/协议/ OpenID的连接/令牌 Keycloak /反思

与QueryParams:

grant_type = client_credentials&client_assertion_type =瓮%3Aietf%3Aparams%3Aoauth%3Aclient断言型%3Ajwt承载&client_assertion = $ BEARER_TOKEN

  1. 使用所接收到的真实的accessToken访问ResourceServer ...


文章来源: Implementing JWT, JWE and JWS (signed JWT) with Keycloak in Spring Boot