周志明的软件架构课
周志明
博士,远光软件研究院院长,《深入理解 Java 虚拟机》《凤凰架构》等书作者
54203 人已学习
免费领取
课程目录
已完结/共 74 讲
架构师的视角 (24讲)
周志明的软件架构课
15
15
1.0x
00:00/00:00
登录|注册

24 | 授权(上):系统如何确保授权的过程可靠?

你好,我是周志明。
在上节课,我们探讨了信息系统中关于安全认证的相关话题,它主要解决的是“你是谁”的问题。那么今天我们要探讨的授权话题,是要解决“你能干什么”的问题。
“授权”这个概念通常伴随着“认证”“审计”“账号”一同出现,被合称为 AAAA(Authentication、Authorization、Audit、Account)。授权行为在程序中的应用也是非常广泛的,我们给某个类或某个方法设置范围控制符(如 public、protected、private、),本质上也是一种授权(访问控制)行为。
而在安全领域中,我们所谈论的授权就更要具体一些,它通常涉及到以下两个相对独立的问题:
确保授权的过程可靠
对于单一系统来说,授权的过程是比较容易做到可控的,以前在很多语境上提到授权,实质上讲的都是访问控制,理论上两者是应该分开的。
而在涉及多方的系统中,授权过程则是一个比较困难,但必须要严肃对待的问题:如何既让第三方系统能够访问到所需的资源,又能保证其不泄露用户的敏感数据?现在,常用的多方授权协议主要有 OAuth 2.0 和 SAML 2.0(两个协议涵盖的功能并不是直接对等的)。
确保授权的结果可控
授权的结果是用于对程序功能或者资源的访问控制(Access Control)。现在,已形成理论体系的权限控制模型有很多,比如自主访问控制(Discretionary Access Control,DAC)、强制访问控制(Mandatory Access Control,MAC)、基于属性的访问控制(Attribute-Based Access Control,ABAC),还有最为常用的基于角色的访问控制(Role-Based Access Control,RBAC)。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了授权的概念及其在信息系统中的重要性,重点讨论了多方系统中授权过程的可靠性和结果的可控性,并介绍了OAuth 2.0作为解决第三方服务中安全授权问题的国际标准。文章详细解释了授权码模式和隐式授权两种授权方式的工作原理和安全性考量。授权码模式通过严格的流程和令牌代替密码的方式解决了密码泄露、访问范围和授权回收等问题,但对第三方应用提出了一定要求。而隐式授权省略了授权码换取令牌的步骤,但在安全性上存在一定风险。总的来说,本文通过对OAuth 2.0的介绍,为读者提供了多方系统中相对安全、相对可控的授权实现方式。文章还介绍了密码模式和客户端模式,分别讨论了它们在特定场景下的应用及安全性考量。最后,文章提出了下节课将要讨论的问题,为读者留下思考和期待。

该试读文章来自《周志明的软件架构课》,如需阅读全部文章,
请先领取课程
免费领取
登录 后留言

全部留言(14)

  • 最新
  • 精选
  • GaopanQi
    老师,最后一个设备码模式有个问题百思不得其解,如果设备在通电后,拿着设备的某个唯一标识码,去授权服务器换了一个用户码和URL,然后拿着用户码去URL换授权token,那为什么就不直接拿着设备的唯一标识吗去这个"确定的”URL换授权Token?这样的设计我感觉风险更高了,多了一层定向,不知道老师怎么看?

    作者回复: 设备码设计的目的是让设备投入工作前,必须获得用户的授权。 假设所有设备都有键盘、屏幕这样的用户交互能力,最佳的方式确实如你所说,让设备直接与授权服务器交互就行了。 但你设想一下,如果你买的是一台输入受限的设备,譬如打印机、电视,甚至是冰箱、热水器这些智能家电,这时候就需要有一个间接层的存在,引导用户能够使用其他能够进行输入的设备(譬如手机)去授权。

    2021-03-16
    13
  • 老师,授权码模式下,用户事先不需要在授权服务器注册吗

    作者回复: OAuth中没有要求事先注册,而实际上,会视具体场景而定。引导用户到URL之后,具体这个URL长什么样子、展示何种信息、要用户输入资料还是点击一下按钮(甚至是自动的)都是可以自行决定的。

    2021-03-23
  • walnut
    此外,RFC 3986 还规定了,如果浏览器对一个带有 Fragment 的地址发出 Ajax 请求,那 Fragment 是不会跟随请求被发送到服务端的,只能在客户端通过 Script 脚本来读取。 此处是通过脚本读取什么?

    作者回复: 通过脚本来读取Fragment

    2021-01-12
    2
  • zhanyd
    微信授权登录用的就是标准的 OAuth 2.0 授权码模式,刚开始接触的时候,哇,感觉好牛逼啊,怎么设计得这么巧妙,原来都是现成的技术(论知识体系的重要性)。。。 比较常见的令牌,例如:JWT(JSON Web Token) 包括 Header,Payload,Signature三部分。 Header包括:token的类型和签名的算法 Payload包括:发行人,过期时间,用户数据等 Signature:根据Header中签名算法生成的数字签名
    2021-01-11
    8
  • neohope
    令牌不需要带太多的信息,但要满足一些基本要求: 1、令牌颁发机构标识 2、令牌被授予机构、APP、服务或网站标识 3、令牌类型(资源访问令牌、刷新令牌等) 4、令牌可访问的资源类型(头像、昵称、二维码等) 5、令牌有效时间范围 6、令牌颁布机构签名和时间戳 7、数据组织方式其实用Json 或 编码过的字符串都可以 这样,三方就都可以快速验证令牌有效性。 给编辑的建议: “简化模式”这个翻译和全文其他地方统一一下呗
    2021-04-03
    1
    2
  • 邓超
    “所以,隐式授权巧妙地利用这个特性,尽最大努力地避免了令牌从操作代理到第三方服务之间的链路,存在被攻击而泄露出去的可能性。”,周老师,您好,令牌是操作代理从授权服务器返回的第三方回调地址Fragment种获取到的,然后操作代理再把令牌给到第三方服务,这还是有操作代理到第三方服务之间的链路的吧?我知道肯定是我哪里理解的有问题,请周老师给解惑。 还有个问题,第三方服务没有服务器的话,那第三方服务也没有地方保存令牌,这样的话,是不是隐式授权模式下,第三方应用每次访问资源,都需要走一次授权过程?
    2021-02-04
    1
    2
  • 山之高兮
    老师,客户端模式是否有必要提供刷新令牌?
    2023-05-18归属地:陕西
    1
  • 斜杠青年
    授权服务的授权是通过接口返回所有权限吗?
    2021-10-22
    1
    1
  • xuanbg
    token过期然后刷新这种机制并不友好,还不如重新授权来得简单方便。我一般是在服务端配置自动刷新机制,只要这个token一直在用,就可以一直有效。直到它超过一定时间没有被使用。
    2023-07-26归属地:上海
  • Andrew陈海越
    时序图画的很赞,自己画一遍印象更深刻
    2022-10-19归属地:湖南
收起评论
显示
设置
留言
14
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部