怎么在前后分离的情况下,做权限认证?

2017-07-09 16:28:39 +08:00
 zzc1995217

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

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

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

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

一些思考的结果:

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

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

6815 次点击
所在节点    NGINX
11 条回复
oh
2017-07-09 17:32:32 +08:00
这问题跟 nginx / url rewrite 无关…
jingniao
2017-07-09 17:34:54 +08:00
交给前端啊,碰到后端请求非法 403 401 之类就跳啊
ryd994
2017-07-09 18:47:21 +08:00
办法有很多
1. secure_link 限制所有请求带 token
2. 请求打到后端,后端不 server 静态文件,而用 X-accel-redirect
3. auth_request
WispZhan
2017-07-09 19:16:43 +08:00
都前后端分离了,你后端还管理路由?

后端就只用 给接口和数据就行了。页面路由前端自己完成。
zzc1995217
2017-07-09 19:24:06 +08:00
@oh 已经解决了。

@jingniao 我想自己做。

@ryd994 能有一点具体的例子吗?

@WispZhan 嗯,我卡在了前端这一块,想着是 nginx 的问题。
guokeke
2017-07-09 19:43:51 +08:00
简单说就是,如果一个请求返回无权限,那么用 js 脚本直接跳对应的提示页面。
Ouyangan
2017-07-09 20:00:27 +08:00
后端全部都是 json 了, 不应该让后端 /nginx 来做 , 前端自己根据接收的状态码做相应的跳转 /提示.
porrat
2017-07-09 20:04:38 +08:00
oauth2
ryd994
2017-07-09 20:21:21 +08:00
@zzc1995217
secure_link 等于是 token 验证。token 就是签名,过时间会失效。具体怎么在后端嵌入,这要自己实现
X-accel-redirect 用法请自行 Google,一般就是个设置 header 的事
auth_request 这个也请自行 Google。简单来说,就是 Nginx 会往后端转发请求。只有后端 200 时才会返回静态文件的内容,否则认为没有权限,给 403。403 你也可以捕捉下来,跳去登录页。
mingyun
2017-07-09 23:23:34 +08:00
wangxiaoer
2017-07-10 07:46:42 +08:00
这问题应该都有成熟的方案了吧,即使是静态页面,页面加载后(前)会向服务端发送一个请求检查当前用户身份,然后该继续继续,该跳转跳转,哪有这么复杂。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/374086

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX