我正在开发由两个 Web API 应用程序(主应用程序和第二个应用程序)和两个前端应用程序(Web UI 和移动应用程序)组成的服务。我将 Keycloak 用于身份验证目的(OAuth、OIDC、JWT 令牌)。我想定义 Keycloak 中两个前端应用程序将使用的角色(移动应用程序仅由一个角色使用,因此它的功能有限,但不确定这是否重要)。在 API 方面,我想使用 API 范围,并在某处定义了角色和范围之间的映射。另外,我想在 Keycloak 中定义 4 个客户端(主 API、第二 API、Web UI、移动客户端)。
问题是:
还有额外的问题:你能给我推荐一本很好的教程/书籍来设计上面提到的身份验证解决方案吗?
之前我读过一本关于身份验证协议的书,浏览了 Keycloak 文档和一堆关于使用 Keycloak 进行身份验证的不同文章,但在大多数情况下,它们仅显示所有应用程序只有一个客户端的情况。而且我仍然不确定什么是正确的方向。
默认情况下,您只需要注册 2 个客户端:网络客户端和移动应用程序。
人们通常会设计范围来代表业务领域,例如
sales
。如果您的 Web 应用程序支持移动应用程序的额外业务领域,您可能会为其提供额外的范围。
您不应该尝试将范围映射到角色。相反,角色是访问令牌中的
claim
,在用户进行身份验证之前无法对其进行评估。您将每个范围配置为包含一个或多个声明。例如,sales
范围可以包含role
声明,并导致将角色值颁发给访问令牌。
多个相关的 API(及其端点)可以共享相同的范围。每个 API 端点都应该拒绝没有其所需范围的访问令牌,以防止它接受错误类型的访问令牌。
最终,每个 API 端点都必须正确执行其授权规则。通常这主要是基于访问令牌声明来完成的。范围和声明是授权的基石 - 由您来设计如何使用它们。