我有一个网站-React应用程序,还有一个管理面板网站,也是React应用。
一个node-js应用程序执行站点和管理面板的后端角色。
我想使用KeyClock19作为一个单一的授权服务。
管理面板的客户端部分应该需要在Moon Clock中进行授权,与管理面板相关的后端端点也应该通过KeyCloack进行保护。
我想知道我是否可以在管理面板的客户端和路由上使用相同的令牌?
我还试图弄清楚我是否可以在不向服务添加代码的情况下实现这一点。
谢谢!
您需要在Keycapture中创建多个客户端,每个客户端对应一个应用程序。
- 后端(nodejs(不会用于登录(没有重定向到登录页面(仅作为接收令牌的应用。因此,您设置了一个">Bearer-only"类型的客户端,而不是默认的">机密"类型。您将获得一个要提供给这个nodejs应用程序的client_id,以及一个client_secret
- 对于Angular应用程序,任何秘密都不应该存储在前端应用程序上,因此您可以创建">public"类型的客户端。您将获得每个应用程序的client_id,但不会获得客户端机密。你必须为这些应用程序定义允许的redirect_url域(这就是安全性(
您将通过访问angular公共应用程序登录SSO提供程序。钥匙斗篷会给你几个代币。一个id令牌、一个access_Token和一个刷新令牌,用于在持续时间到期时获得新的access_toke。
当从angular应用程序向后端发出ajax请求时,您必须在请求中添加此访问令牌,后端必须检查此访问令牌的有效性。在将令牌发送到后端之前,请始终检查令牌是否具有一定的时间有效性,如果没有,请获取新的令牌。
为了使该系统更加精确,您还可以在每个客户端中至少添加一个角色(如"Access Foo"角色(,然后删除每个客户端中的"允许全范围"复选框(在"范围"选项卡中(。然后,您将正确的应用程序和角色关联起来(就像您需要为后端客户端设置"access Nodejs backend"角色一样(。然后,例如使用组,您为用户提供正确的访问权限(比如是否访问nodejs后端(。通过这种方式,key斗篷生成并提供给公共角度应用程序的访问令牌将包含"aud"密钥(受众(上的指示。如果你有权访问nodejs后端,你会在aud键中找到nodejs后台client_id(它是一个列表(,否则就不会了。通过这种方式,您甚至可以管理几个后端,现在,如果您可以使用访问令牌访问部分或全部后端,则可以从前端应用程序进行管理。后端还应检查令牌的aud
密钥是否包含他的client_id。