我是 keycloak 的新手,想检查一下上述架构的通用设计是什么。 我有 1 个后端 (quarkus) 1 个前端 (angular) 和 1 个 flutter。
我想看看我是否可以利用客户端的功能。我的想法是在领域内有一个单独的客户端。例如
REALM = MyAppRealm
客户端 = 后端客户端和前端客户端
我从前端客户端得到的token可以用来从后端访问api吗?
我进行此设置的原因是前端客户端具有 public 访问类型,而后端具有 机密
总结一下。我想看看我是否可以将我从 front-endclient 获得的令牌重用于我的 backend-client
答案 0 :(得分:1)
是的,你当然可以这样做。
openid 的目的是在不同客户端之间共享身份验证和授权,而无需共享凭据(任何客户端都不知道密码)。受信任的第三方(此处为 Keycloak)将返还签名令牌以换取凭据。这个令牌将证明用户是谁,以及他在前端和后端之间的通信中可以做什么。
总结:
您的 Angular 前端使用公共客户端和隐式流程对用户进行身份验证。成功通过身份验证后,前端会获得访问令牌和刷新令牌。
在对后端进行 REST 调用时,您的前端需要使用访问令牌作为不记名令牌('授权:在此插入不记名访问令牌')设置标头授权。您可以使用拦截器 (example)
自动执行此操作最后,当您的后端收到 API 请求时,它可以检查 Authorization 标头以确保请求经过身份验证和授权。有关如何使用 Quarkus 执行此操作,此文档页面中解释了所有内容:https://quarkus.io/guides/security-openid-connect