V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
zzc1995217
V2EX  ›  NGINX

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

  •  
  •   zzc1995217 ·
    cciradih · 2017-07-09 16:28:39 +08:00 · 6984 次点击
    这是一个创建于 2723 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    一些思考的结果:

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

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

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

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

    @jingniao 我想自己做。

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

    @WispZhan 嗯,我卡在了前端这一块,想着是 nginx 的问题。
    guokeke
        6
    guokeke  
       2017-07-09 19:43:51 +08:00 via Android
    简单说就是,如果一个请求返回无权限,那么用 js 脚本直接跳对应的提示页面。
    Ouyangan
        7
    Ouyangan  
       2017-07-09 20:00:27 +08:00
    后端全部都是 json 了, 不应该让后端 /nginx 来做 , 前端自己根据接收的状态码做相应的跳转 /提示.
    porrat
        8
    porrat  
       2017-07-09 20:04:38 +08:00 via iPhone
    oauth2
    ryd994
        9
    ryd994  
       2017-07-09 20:21:21 +08:00 via Android
    @zzc1995217
    secure_link 等于是 token 验证。token 就是签名,过时间会失效。具体怎么在后端嵌入,这要自己实现
    X-accel-redirect 用法请自行 Google,一般就是个设置 header 的事
    auth_request 这个也请自行 Google。简单来说,就是 Nginx 会往后端转发请求。只有后端 200 时才会返回静态文件的内容,否则认为没有权限,给 403。403 你也可以捕捉下来,跳去登录页。
    mingyun
        10
    mingyun  
       2017-07-09 23:23:34 +08:00
    wangxiaoer
        11
    wangxiaoer  
       2017-07-10 07:46:42 +08:00
    这问题应该都有成熟的方案了吧,即使是静态页面,页面加载后(前)会向服务端发送一个请求检查当前用户身份,然后该继续继续,该跳转跳转,哪有这么复杂。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6126 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 02:32 · PVG 10:32 · LAX 18:32 · JFK 21:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.