限制前端客户端与领域中的组/角色的连接



我正在寻找一种方法来限制用户访问领域中的特定客户端。我知道我可以在启用授权(细粒度授权支持(的情况下使用客户端,但在尝试从前端连接时不起作用(客户端需要是公共的,而不是机密的(。我正在使用一个javascript应用程序从前端登录。

有没有一种方法可以为公共客户端或变通方案启用授权?

谢谢。

我不确定这是否能完全回答你的问题,因为它还没有具体说明,但它可能会给你一些进一步的帮助。

如果您是该主题的新手,请在此处查看公开客户和机密客户之间的区别。

对于像HTML/Javascipt应用程序这样的公共客户端,当前的最佳实践是将OpenId Connect与授权代码流+PKCE一起使用。HTTPS当然是必须具备的。我建议您使用javascript openid连接适配器,例如:

https://github.com/panva/node-openid-client

基本上,您的身份验证/授权流程如下所示:当用户想首先从前端客户端应用程序登录时,会生成一个唯一的验证器,该验证器仅适用于确切的用户/浏览器会话。这个值get被散列为一个代码challege。然后,用户被重定向到您的授权服务器的登录页面(例如Key斗篷(,并传递一些参数,如重定向uri和挑战。

成功登录后,用户将在密钥斗篷服务器上获得一个会话,该服务器还存储散列挑战。然后,用户被重定向到给定的重定向uri(应用程序中的一个路径(,并附带一个获取访问令牌的代码。回到应用程序中,应用程序使用原始值和代码来获得实际的令牌。授权服务器根据存储的质询获取值,如果匹配,则获取访问令牌。您可以看到,额外的验证器是为了防止任何人为了代表您获得令牌而破坏您的代码片段。

现在,您的浏览器应用程序中有一个编码的访问令牌。请注意,令牌本身通常只进行编码而非加密,但可以对其进行签名。稍后可以从您的后端使用这些签名来检查令牌的完整性,但我们很快就会了解这一点。访问令牌中包含的角色、请求时间、作用域等会告诉您用户/身份的权限。当然,你可以使用它们来启用/禁用应用程序中的功能、阻止路由等,但最终客户端保护永远不会真正有效,所以你真正的授权和资源保护发生在你的资源服务器上,它是你的后端(节点、.net核心、java等(,可能是一个宁静的Web Api。您将访问令牌作为http请求头的一部分,随每个请求一起传递到后端。现在,您的后端检查令牌完整性(可选(到期时间等。分析范围、请求时间和角色以限制资源访问。

例如,一个简单的GET myapi/car/{1}可能只需要一个令牌,甚至可以是匿名的,而POST myapi/cars或PUT myapi/cal/{2}可能需要一个特殊角色或更高的权限。

这对你有帮助吗?

最新更新