OAuth 2.0实战课
王新栋
京东资深架构师
新⼈⾸单¥9.9
2549 人已学习
课程目录
已完结 17 讲
0/2登录后,你可以任选2讲全文学习。
开篇词 (1讲)
开篇词 | 为什么要学OAuth 2.0?
免费
基础篇 (6讲)
01 | OAuth 2.0是要通过什么方式解决什么问题?
02 | 授权码许可类型中,为什么一定要有授权码?
03 | 授权服务:授权码和访问令牌的颁发流程是怎样的?
04 | 在OAuth 2.0中,如何使用JWT结构化令牌?
05 | 如何安全、快速地接入OAuth 2.0?
06 | 除了授权码许可类型,OAuth 2.0还支持什么授权流程?
进阶篇 (8讲)
07 | 如何在移动App中使用OAuth 2.0?
08 | 实践OAuth 2.0时,使用不当可能会导致哪些安全漏洞?
09 | 实战:利用OAuth 2.0实现一个OpenID Connect用户身份认证协议
10 | 串讲:OAuth 2.0的工作流程与安全问题
11 | 实战案例:使用Spring Security搭建一套基于JWT的OAuth 2.0架构
12 | 架构案例:基于OAuth 2.0/JWT的微服务参考架构
13 | 各大开放平台是如何使用OAuth 2.0的?
14 | 查漏补缺:OAuth 2.0 常见问题答疑
结束语 (2讲)
期末测试 | 一套习题,测试你的掌握程度
结束语 | 把学习当成一种习惯
OAuth 2.0实战课
15
15
1.0x
00:00/00:00
登录|注册

12 | 架构案例:基于OAuth 2.0/JWT的微服务参考架构

杨波 2020-07-25
你好,我是王新栋。
在前面几讲,我们一起学习了 OAuth 2.0 在开放环境中的使用过程。那么 OAuth 2.0 不仅仅可以用在开放的场景中,它可以应用到我们任何需要授权 / 鉴权的地方,包括微服务。
因此今天,我特别邀请了我的朋友杨波,来和你分享一个基于 OAuth 2.0/JWT 的微服务参考架构。杨波,曾先后担任过携程框架部的研发总监和拍拍贷基础架构部的研发总监,在微服务和 OAuth 2.0 有非常丰富的实践经验。
其中,在携程工作期间,他负责过携程的 API 网关产品的研发工作,包括它和携程的令牌服务的集成;在拍拍贷工作期间,他负责过拍拍贷的令牌服务的研发和运维工作。这两家公司的令牌服务和 OAuth 2.0 类似,但要更简单些。
接下来,我们就开始学习杨波老师给我们带来的内容吧。
你好,我是杨波。
从单体到微服务架构的演进,是当前企业数字化转型的一大趋势。OAuth 2.0是当前业界标准的授权协议,它的核心是若干个针对不同场景的令牌颁发和管理流程;而JWT是一种轻量级、自包含的令牌,可用于在微服务间安全地传递用户信息。
据我目前了解到的情况,虽然有不少企业已经部分或全部转型到微服务架构,但是在授权认证机制方面,它们一般都是定制自研的,比方说携程和拍拍贷的令牌服务。之所以定制自研,主要原因在于标准的 OAuth 2.0 协议相对比较复杂,门槛也比较高。定制自研固然可以暂时解决企业的问题,但是不具备通用性,也可能有很多潜在的安全风险。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《OAuth 2.0实战课》,如需阅读全部文章,
请订阅文章所属专栏新⼈⾸单¥9.9
立即订阅
登录 后留言

精选留言(9)

  • Geek_334e32
    场景 2:第一方移动应用 + 授权码许可模式。 这个不合适吧?现在app登陆都是用户名和密码或者验证码模式。

    作者回复: 请看我在文中给出的解释连接,用户名/密码模式对于无线App并不安全:
    "We have learned the hard way, so let’s warn everyone else here ������ DO NOT USE grant_type=password in any place where a hacker can de-compile your app or find your client_id plus client_secret. If you create a mobile app, you MUST use the full 3-legged Oauth via an embedded web form (with captcha or similar protection on it). Never ever create a native app login screen, which can ask your server via a simple post if the used credentials are correct (e.g. like the password grant type). Having this allows someone to start massively guessing for passwords. We know, app-developers do not like non-native things, but believe me, this is the only simple way to prevent attacks AND maintain super fast flexibility in changing the login procedure without having to roll out a new app version and trying to kill off old versions of the app. Having the web form login allows us to easily add for example 2-factor authentication when we want or need to."

    2020-07-29
    1
  • 西
    全程使用oauth2令牌,那么网关之后的每个微服务都需要自己根据令牌token去idp或者redis或者mysql中去查询用户信息,如果全程使用jwt令牌,主要是还是由于jwt自包含用户信息,存在暴露用户信息的安全风险。(如果jwt中只存在用户名,不存在其他相关信息也可以考虑全程使用jwt令牌)

    作者回复: 不错⛽️

    2020-07-25
    1
  • 往事随风,顺其自然
    全程采用JWt,用户信息容易暴露,对于安全级别高,最好不使用,对于oauth在安全级别更高,但是实现用户信息更复杂,混合之后,权衡了安全性和易用性,个人理解

    作者回复: 不错

    2020-07-25
    1
    1
  • kylexy_0817
    其实全程使用JWT,也没啥问题,只是如果想其较为安全,就要把公钥放在客户端,让其加密后再传输(或者获取到令牌后就直接加密存放在cookies或localstorage),但JWT的内容较多,即使加密后的内容也会较长,公网环境传输效率不高。而访问令牌,就是为了解决公网传输效率问题。不知有没理解对。

    作者回复: JWT是自包含令牌,里头可以包含一部分用户信息,全程使用JWT也可以,JWT内部的数据本身只是加签防篡改,本来就是客户端可见的,一般服务器端启用HTTPS就可以了,再做一次加密意义并不大。

    相比JWT,普通访问令牌机制还有一个好处,就是可以集中吊销令牌,而JWT一般需要等到自然过期,因为它是自校验的。

    2020-08-02
  • Tim Zhang
    网关获得 JWT 令牌,校验 Scope 是否有权限调用 API,如果有就转发到后台 API 进行调用。

    校验是如何校验的? 并且scope 和 authority有啥区别么

    作者回复: 企业根据具体场景,需要定义一个scope和API之间的权限关系表,这个表需要单独维护,并且可以缓存在网关上,加快网关的校验。所谓校验,就去查这张表,看某个scope能否访问某个API。

    scope和authority并没有所谓官方定义,你可以根据上下文赋予它们具体的语义。

    2020-07-27
    1
  • tt
    有一个问题,JWT一般是加密的,在网关之后使用JWT仍然需要加密么?那会不会因为加解密带来性能问题?如果此时对报文内容也采用对称加密,性能下降会更严重。

    该怎么处理呢?有了客户端凭据(appid + appsecret)对三方软件做认证的情况下,还需要公私钥证书或者硬Token么?

    作者回复: jwt不是加密,是加签名,消息不能篡改,内容还是可以看到的。

    具体要看业务场景,如果企业内网是授信的,安全风险级别低,也可以考虑不用jwt,直接传普通json格式的用户信息。

    对于一些涉及银行资金业务的场景,普通的OAuth2/JWT都还不够,还需要双因素和硬token等配套安全机制。

    2020-07-26
    2
  • 在路上
    全程采用JWT令牌模式,包含很多用户信息,权限信息,有泄露风险;jwt信息如果被修改,有权限越界的风险。采用OAuth令牌模式用户信息安全无问题,在领域层每次都要通过令牌查询用户级权限信息,加大的领域服务的开销,影响性能。

    作者回复: 基本正确,但是jwt信息只是可以被客户端看到,一般也是没办法篡改的,只要secret key或者私钥不泄密。

    2020-07-26
  • inrtyx
    第六点是关于 Web Session,这个不太明白。token信息肯定要放浏览器啊!不然岂不是每次请求都要登录?

    作者回复: 网站会话有几种做法,一种是Session数据都存在服务器端,客户端浏览器cookie中只存sesssionID,我把这种称为Web Session,这种是服务器端有状态的Session技术。另外一种是Session数据都存在浏览器cookie中,我把这种称为客户端Session,这种是服务器端无状态的Session技术。

    2020-07-25
    2
  • Zhou
    Anonymous user的请求在网关和oauth2上面应该怎么处理比较好?

    作者回复: 具体要看API对安全的要求,某些API如果安全不敏感,Anonymous user也可以访问的话,那么在网关上可以做开放授权的策略。

    2020-07-25
收起评论
9
返回
顶部