技术解析

怎么在前后分离的情况下,做权限认证?
0
2021-05-21 02:05:14
idczone

我想要的是完全的前后分离项目,感觉这个问题很复杂。

我准备做一个前后分离的后台管理系统,两个静态页面,一个登录,一个管理主页。

如果单用 Spring Security/Shiro 的话很简单,将页面写在应用里可以通过配置拦截器和 Controller 很轻松地进行有权限跳转管理主页,没权限的键入任何 URL 都会国外服务器跳转至登录页直到有权限为止。

问题来了,如果做前后分离的话,页面是静态的,假如我用 Nginx 部署静态页面,那么在 URL 里键入静态页面文件名就能访问对应的页面。而我在后端用 Spring Security/Shiro 可以基于 JWT 来实现权限区分,带 Token 和不带 Token 两种情况。但是怎么和前端进行配合来进行权限跳转?

一些思考的结果:

1、Nginx 可以通过重写 URL 的方式来隐藏 .html 后缀。

2、可以通过登录页来提交登录申请,然后发送 JSON 给后端进行验证,验证成功可以通过 JavaScript 进行跳转,不成功就跳转到登录页,所以现在问题变成了怎么拦截未验证的请求? Nginx 有类似于拦截器这样的东西吗?


这问题跟 nginx / url rewrite 无关…

交给前端啊,碰到后端请求非法 403 401 之类就跳啊

办法有很多
1. secure_link 限制所有请求带 token
2. 请求打到后端,后端不 server 静态文件,而用 X-accel-redirect
3. auth_request

都前后端分离了,你后端还管理路由?
后端就只用 给接口和数据就行了。页面路由前端自己完成。

已经解决了。
我想自己做。
能有一点具体的例子吗?
嗯,我卡在了前端这一块,想着是 nginx 的问题。

简单说就是,如果一个请求返回无权限,那么用 js 脚本直接跳对应的提示页面。

后端全部都是 json 了, 不应该让后端 /nginx 来做 , 前端自己根据接收的状态码做相应的跳转 /提示.

oauth2


secure_link 等于是 token 验证。token 就是签名,过时间会失效。具体怎么在后端嵌入,这要自己实现
X-accel-redirect 用法请自行 Google,一般就是个设置 header 的事
auth_request 这个也请自行 Google。简单来说,就是 Nginx 会往后端转发请求。只有后端 200 时才会返回静态文件的内容,否则认为没有权限,给 403。403 你也可以捕捉下来,跳去登录页。

jwt.io

这问题应该都有成熟的方案了吧,即使是静态页面,页面加载后(前)会向服务端发送一个请求检查当前用户身份,然后该继续继续,该跳转跳转,哪有这么复杂。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服