V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
chinesedragon
V2EX  ›  程序员

能否提供个前后端分离的例子

  •  
  •   chinesedragon · 2017-11-09 15:57:25 +08:00 · 4325 次点击
    这是一个创建于 2364 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前,前后端分离开发的概念非常火,而且感觉也比较适合我们公司目前的状态,但是其它人对这个技术不是很了解。
    公司开发一个产品,有网页端,有手机端,所以目前想法是做一套后台接口,同时给网页端和手机端使用。
    RESTFUL 接口大家都知道怎么做,springmvc 就可以做,就是身份验证部分不知道怎么做。
    所以想请 V 友给讲讲,后台 rest 接口如何做身份验证。
    如果能有个例子那就更好了,例子最好是简单一点的,js 提交身份信息,后台验证返回结果,然后再 js 请求资源,后台验证身份若通过验证则返回资源信息。
    26 条回复    2017-11-10 12:44:24 +08:00
    throns
        1
    throns  
       2017-11-09 16:16:08 +08:00 via iPhone
    JWT 呀
    pkaq
        2
    pkaq  
       2017-11-09 16:17:33 +08:00
    JWT
    biabia123456
        3
    biabia123456  
       2017-11-09 16:24:02 +08:00
    我自己的项目是 jwt + redis 做身份认证
    chinesedragon
        4
    chinesedragon  
    OP
       2017-11-09 16:28:42 +08:00
    @throns
    @pkaq
    @biabia123456 谢谢,我查查去。不知道有例子没有
    chairuosen
        5
    chairuosen  
       2017-11-09 16:31:39 +08:00
    一般后端接口前面有一层网关,后端接口不验证身份,网关验证后放行。
    server
        6
    server  
       2017-11-09 16:33:38 +08:00
    whypool
        7
    whypool  
       2017-11-09 16:34:58 +08:00
    后端:留一个固定的接口返回 token ;
    前端:请求头里面加 token,其他不变
    chinesedragon
        8
    chinesedragon  
    OP
       2017-11-09 16:37:02 +08:00 via Android
    @whypool 后端不是还要验证 token ?
    chinesedragon
        9
    chinesedragon  
    OP
       2017-11-09 16:39:51 +08:00 via Android
    @server 哥哥,那应该用什么啊?
    suikator
        10
    suikator  
       2017-11-09 16:46:45 +08:00 via Android
    jwt 简单易用 文档遍地
    kanezeng
        11
    kanezeng  
       2017-11-09 16:47:49 +08:00
    @chinesedragon 用 Token,只是不要用 JWT 吧。
    JWT 的好处是不需要后端再存储 Token,收到 Token 之后验证 token 有效,就能获得用户信息,比如 id 之类的。
    问题在于后端没法强行让 token 失效,比如用户修改了密码,用户要求在所有设备都退出登录之类的。。。
    我个人比较喜欢开一个 redis 存储 token,用户登录成功后,后端生成一个 token (指定位数的随机字符串)返回给前端,同时存储在 redis 里(包含对应的用户 id 之类的)。前端后续所有请求都带上这个 token,后端收到 token 后到 redis 里去取用户信息。
    hcymk2
        12
    hcymk2  
       2017-11-09 16:50:33 +08:00
    如果项目是 all in one 的设计的话,狭义前后端分离其所没有什么意义,反而会让简单项目变的复杂。
    chinesedragon
        13
    chinesedragon  
    OP
       2017-11-09 16:58:45 +08:00
    @kanezeng 前端存储 token 是不是放在 cookie 里啊?
    chinesedragon
        14
    chinesedragon  
    OP
       2017-11-09 16:59:08 +08:00
    @hcymk2 为什么呢,原因呢?
    chinesedragon
        15
    chinesedragon  
    OP
       2017-11-09 17:00:41 +08:00
    @kanezeng 还有 token 一般都放在 header 的哪个里呢?
    server
        16
    server  
       2017-11-09 17:42:34 +08:00
    @chinesedragon 归根到底还是 session 的路子,自己造这个轮子。单点登录,多终端登录
    haonan3344
        17
    haonan3344  
       2017-11-09 17:50:48 +08:00 via Android
    @server 已经上了 jwt 的船了,也不下去了。。。
    biabia123456
        18
    biabia123456  
       2017-11-09 18:19:51 +08:00
    @kanezeng 我是通过再把 token 存在 redis 实现 token 失效验证的 感觉没什么大问题
    kanezeng
        19
    kanezeng  
       2017-11-09 19:40:45 +08:00
    @chinesedragon 前端通常可以存在 localStorage。提交的时候就看和后端的约定了,常见的比如放在 header 里的 Authorization 字段,也有比如 POST 请求的 BODY 里提交的。
    kanezeng
        20
    kanezeng  
       2017-11-09 19:56:29 +08:00
    @biabia123456 这个倒是个不错的方法,不过这样的话 JWT 原有的优势就没有了吧
    qfdk
        21
    qfdk  
       2017-11-09 20:42:40 +08:00 via iPhone
    jhipster
    server
        22
    server  
       2017-11-09 23:02:46 +08:00
    @server 那还发这贴干嘛,浪费大家
    tradzero
        23
    tradzero  
       2017-11-09 23:18:21 +08:00 via Android
    @kanezeng 你都用 redis 来存储 token 了 把需要失效的 jwt 存起来 不是一样的道理吗…… 这样你的存储量少了不知道多少……
    rework16
        24
    rework16  
       2017-11-09 23:24:05 +08:00
    给你个例子 http://www.imvocab.com
    前端用的 vue,后端用的 flask,这是个存练手的项目,后面有时间再折腾了
    LeeSeoung
        25
    LeeSeoung  
       2017-11-10 09:22:55 +08:00   ❤️ 1
    springboot + zuul 网关做身份验证 + redis 做 token 持续化
    chinesedragon
        26
    chinesedragon  
    OP
       2017-11-10 12:44:24 +08:00 via Android
    @rework16 源码能分享吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2382 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 15:28 · PVG 23:28 · LAX 08:28 · JFK 11:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.