Javascript 使用REST服务对页面的访问控制

Javascript 使用REST服务对页面的访问控制,javascript,web-services,rest,Javascript,Web Services,Rest,我读过很多关于REST服务的认证、授权等方面的讨论。 我现在知道了如何使用REST进行身份验证/授权 但我不明白的是,如何使用REST服务控制对网页的访问。 这是一种好的做法吗?如果是,怎么做 示例: REST服务的根目录:localhost/services 网页根目录:localhost/pages 现在,情况是: 1。客户端试图转到页面localhost/pages/join.html,但它没有访问权限 2.因此,服务器应该检查客户端是否有权访问该页面,并且由于它没有权限,应该将客户端

我读过很多关于REST服务的认证、授权等方面的讨论。 我现在知道了如何使用REST进行身份验证/授权

但我不明白的是,如何使用REST服务控制对网页的访问。 这是一种好的做法吗?如果是,怎么做

示例:

  • REST服务的根目录:localhost/services

  • 网页根目录:localhost/pages

现在,情况是:

1。客户端试图转到页面
localhost/pages/join.html
,但它没有访问权限

2.因此,服务器应该检查客户端是否有权访问该页面,并且由于它没有权限,应该将客户端重定向到某个地方

我的问题不是服务器如何检查、理解客户机是否正确

然而,我想知道,何时以及如何使用REST服务进行此检查和重定向

例如,我想到的第一个想法是,在
join.html
的主体中,使用
运行一个javascript,检查向REST服务发送JSON消息的客户端的访问权限,比如说,发送到
localhost/services/access

然后,服务将返回其答案,如果可以,页面将被加载,如果不可以,则将使用
window.location.href
重定向页面。这是决定使用REST服务访问网页的权限的方法吗?是否有其他常见的解决方案/实践

请再次注意,我不是在问,如何保护我的RESTAPI等,而是在问


如何使用REST服务检查我的网页的访问权限?

我认为最好在服务器端进行选择和自动验证,客户端不安全,因为您的代码和逻辑已完全暴露,很容易伪造请求

通常,在服务器端,您可以使用拦截器拦截请求,在该拦截器中,检查用户角色及其访问权限,然后决定是重定向请求(或发送403响应)还是发送正常资源

拦截器的实现取决于您在服务器端使用的语言

例如,如果您使用java(jax-rs):

如果您使用servlet,则构建一个过滤器

如果使用struts2,则直接支持拦截器。通过使用Spring开发的应用程序,您可以使用AOP拦截请求

如果将node.js与express一起使用,则可以构建一个处理身份验证逻辑的中间件

希望这些能有所帮助:)

更新:


请求流程为:获取请求->检索客户端令牌(一般为cookie)->根据该令牌查找用户角色->检查角色是否允许访问资源->服务器资源-/p>我认为最好在服务器端进行搜索和自动验证,客户端不安全,由于您的代码和逻辑完全公开,因此很容易伪造请求

通常,在服务器端,您可以使用拦截器拦截请求,在该拦截器中,检查用户角色及其访问权限,然后决定是重定向请求(或发送403响应)还是发送正常资源

拦截器的实现取决于您在服务器端使用的语言

例如,如果您使用java(jax-rs):

如果您使用servlet,则构建一个过滤器

如果使用struts2,则直接支持拦截器。通过使用Spring开发的应用程序,您可以使用AOP拦截请求

如果将node.js与express一起使用,则可以构建一个处理身份验证逻辑的中间件

希望这些能有所帮助:)

更新:


请求流程为:获取请求->检索客户端令牌(通常为cookie)->根据该令牌查找用户角色->检查角色是否允许访问资源->服务器资源-/p>您可以发送从REST API接收的令牌,将从REST API接收到的令牌发送到web服务器,使其保存在浏览器客户端的会话对象中。

您可以将从REST API接收到的令牌发送到web服务器,使其保存在浏览器客户端的会话对象中。

谢谢您的回答。我知道休息服务不适合做那种事,对吧?例如,假设我使用servlet过滤器,它位于REST服务之外的另一个项目(.war)中。我如何理解用户是否使用我的REST服务进行了身份验证?(不使用数据库)因为尽管客户端向从REST服务获取的Servlet发送令牌、cookie或任何东西,Servlet将无法检查该令牌,因为它没有正确的令牌。所以,我是否应该从Servlet中向REST服务询问这个问题?这似乎不是一个好的做法,对吧?访问控制应该绑定到rest服务服务器中,请参阅我的更新答案。但我没有看到的是:requeest是对/pages/a.html进行的,它不是rest服务。如何中断此操作并使用REST服务?是的!好的,那么您告诉我们,从servlet中询问REST服务,不?没有用。从浏览器发送到servlet的请求与从servlet发送到web服务以询问用户是否经过身份验证的请求不同。这里需要很多解决方法。谢谢你的回答。我知道休息服务不适合做那种事,对吧?例如,假设我使用servlet过滤器,它位于REST服务之外的另一个项目(.war)中。我如何理解用户是否使用我的REST服务进行了身份验证?(不使用数据库)因为尽管客户端向从REST服务获取的Servlet发送令牌、cookie或任何东西,Servlet将无法检查该令牌,因为它没有正确的令牌。所以,我是否应该从Servlet中向REST服务询问这个问题?这似乎不是一个好的做法,对吗?访问控制应该