为单独的服务(前端和后端)创建客户端/领域的方法

时间:2021-04-10 15:52:41

标签: keycloak quarkus keycloak-rest-api

我是 keycloak 的新手,想检查一下上述架构的通用设计是什么。 我有 1 个后端 (quarkus) 1 个前端 (angular) 和 1 个 flutter。

我想看看我是否可以利用客户端的功能。我的想法是在领域内有一个单独的客户端。例如

REALM = MyAppRealm

客户端 = 后端客户端和前端客户端

我从前端客户端得到的token可以用来从后端访问api吗?

我进行此设置的原因是前端客户端具有 public 访问类型,而后端具有 机密

总结一下。我想看看我是否可以将我从 front-endclient 获得的令牌重用于我的 backend-client

1 个答案:

答案 0 :(得分:1)

是的,你当然可以这样做。

openid 的目的是在不同客户端之间共享身份验证和授权,而无需共享凭据(任何客户端都不知道密码)。受信任的第三方(此处为 Keycloak)将返还签名令牌以换取凭据。这个令牌将证明用户是谁,以及他在前端和后端之间的通信中可以做什么。

总结:

  1. 您的 Angular 前端使用公共客户端和隐式流程对用户进行身份验证。成功通过身份验证后,前端会获得访问令牌和刷新令牌。

  2. 在对后端进行 REST 调用时,您的前端需要使用访问令牌作为不记名令牌('授权:在此插入不记名访问令牌')设置标头授权。您可以使用拦截器 (example)

    自动执行此操作
  3. 最后,当您的后端收到 API 请求时,它可以检查 Authorization 标头以确保请求经过身份验证和授权。有关如何使用 Quarkus 执行此操作,此文档页面中解释了所有内容:https://quarkus.io/guides/security-openid-connect