怎么在前后分离的情况下,做权限认证? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zzc1995217
V2EX    NGINX

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

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

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

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

    如果单用 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     Solana     2780 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 07:07 PVG 15:07 LAX 00:07 JFK 03:07
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86