2. 南阳理工学院 软件学院,南阳 473000
2. School of Software, Nanyang Institute of Technology, Nanyang 473000, China
在云计算时代, 开放和共享数据的需求日益增加, 为了便于用户将资源授权给第三方应用, 开放授权的思想应运而生. 开放授权旨在对权限进行细粒度的控制, 并且保护用户的密码以及认证凭据. 目前主要的Web2.0安全开放授权机制是: OAuth协议[1], OpenID协议[2]和IAM服务[3].
OAuth协议面向个人用户, 可对资源进行开放授权. 在线授权是其特点: OAuth让第三方无法触及到用户的敏感信息(如用户名与密码等), 在认证用户的资源所有者身份后, 即可以申请获得该用户资源的授权[4], 从而安全便捷地访问用户的网络资源.
OpenID描述用户分布式方式身份认证的URI框架[5], 解决了传统数字身份标识管理以及认证的问题. 具有多种认证方式, 例如用户名/密码的通用认证方式, 或生物识别技术、智能卡等新型认证方式. 服务提供商不用考虑认证机制, 用户只需要注册获取 OpenID 账户, 即可在多个网站间登录, 而不需要重复注册, 便于用户统一管理身份信息[6].
IAM服务涵盖两方面内容: 用户信息管理和用户访问策略管理. IAM服务采用预先授权, 用户在预先知道第三方应用所需资源请求的情况下, 授权客户端使用REST API方式访问资源.
2 OAuth协议工作原理(1) 用户打开客户端后, 客户端要求用户给予授权. 请求会包含以下信息: 用户的身份信息, 要访问的资源路径和操作类型等.
(2) 用户同意给予客户端授权, 并传输授权证据.
(3) 客户端向认证服务器申请访问令牌. 此时, 客户端需提供授权证据和客户端的凭证.
(4) 客户端通过认证服务器的认证后, 得到其发放的访问令牌.
(5) 客户端携带访问令牌, 向资源服务器申请获取资源. 在令牌的有效期内, 客户端可多次携带令牌访问资源.
(6) 资源服务器验证令牌的有效性后同意让客户端访问资源. 令牌的有效性包括是否过期、是否伪造、是否越权等.
![]() |
图 1 OAuth协议工作原理 |
在OAuth 2.0中定义了四种授权方式, 如表1所示.
![]() |
表 1 授权方式 |
在OAuth 2.0协议在使用授权码模式与认证服务器进行互动时, 使用到的各个参数如表2至表6所示.
![]() |
表 2 申请认证URI的参数含义 |
![]() |
表 3 回应URI的参数含义 |
![]() |
表 4 请求令牌的参数含义 |
![]() |
表 5 返回令牌的参数含义 |
![]() |
表 6 更新令牌的参数含义 |
3 CPN简介
Petri 网是一种基于状态的建模方法, CPN (Colored Petri Net) 是在 Petri 网基础上扩展而来, 具有概念简单性以及图形化表达的特点. Kumar和Spaf- ford将 Petri 网应用于Web安全领域[7], 建立了基于Petri网的入侵检测模型, 对入侵行为进行CPN建模, 当相应模型匹配的事件序列被触发时, 表示入侵行为发生.
CPN在解决协议建模问题时具有以下的优势:
(1)层次化. 引入了层次子网的结构, 含有替代变迁和融合库所, 可利用多个彼此联系的CPN网子模型构建复杂系统的整体模型.
(2)可实现推理. 具有变迁机制, 库所被触发后变迁到达新的库所, 因果关系明确.
(3)可处理并发或顺序性问题. 具有时间因子可以处理不同行为发生的时间.
(4)有较完善的仿真工具, 可使用CPNTools工具进行可视化建模和仿真分析.
4 OAuth2.0协议建模 4.1 OAuth2.0协议的顶层模型基于CPN的OAuth2.0协议顶层模型如图2所示, 定义模型的颜色集和变量如下:
colset DATA= String;
colset NO = INT;
colset NO*DATA =Product NO*DATA;
var success: BOOL;
![]() |
图 2 OAuth2.0协议的顶层模型 |
库所A表示申请认证URI, 库所B表示请求令牌, 库所C表示返回令牌, 库所D表示回应URI, 库所E表示更新令牌. 库所Type credential 表示授权证书, 库所Grant Access表示授权访问.
申请认证URI的参数和请求令牌的参数(client_id, redirect_uri)用数据类型NO×DATA表示, 回应URI的参数(code) 用数据类型NO表示, 返回令牌的参数(expires_in) 用数据类型NO表示, 更新令牌的参数(refresh_token, scope)用数据类型NO×DATA表示.
4.2 Resource Owner模型Resource Owner的执行过程如图3所示. 用户访问客户端, 给客户端授权后, 认证服务器将用户导向重定向URI, 并附授权码.
![]() |
图 3 Resource Owner模型 |
变迁Resource Owner表示客户端将用户导向认证服务器, 变迁Receive Token表示用户是否将授权给予客户端. 库所NextToken表示用户批准授权后发送的授权证据. 库所Type credential 表示授权证书. 库所A表示申请认证URI, 库所D表示回应URI, 库所E表示更新令牌.
4.3 Authorization Server模型Authorization Server的执行过程如图4所示. 在认证服务器确认授权码以及重定向URI无误后之, 将访问令牌发送给客户端.
![]() |
图 4 Authorization Server模型 |
变迁Generate token表示客户端向认证服务器请求访问令牌, 变迁Validate token表示验证通过后, 向客户端返回访问令牌. 库所A表示申请认证URI, 库所B表示请求令牌, 库所C表示返回令牌, 库所D表示回应URI.
4.4 Resource Server模型Resource Server的执行过程如图5所示. 客户端携带访问令牌访问资源服务器上的资源. 如果令牌在有效期内, 客户端可以多次访问相关资源. 资源服务器验证令牌的有效性, 通过验证后, 提供所需服务.
![]() |
图 5 Resource Server模型 |
变迁Resource server表示验证令牌的有效性. 库所NextReq表示客户端多次携带令牌访问资源. 库所Grant access表示授权访问相应资源. 库所B表示请求令牌, 库所C表示返回令牌, 库所E表示更新令牌.
5 OAuth2.0协议分析跨站请求伪造缩写为CSRF, 通过在授权用户访问的页面中包含链接, CSRF攻击可伪装用户请求, 访问受信任网站. CSRF攻击者的目标站点常具有持久化授权cookie或者具有当前受信任用户的会话cookie. 为了防范CSRF攻击, 需要将类似cookie的持久化授权方法, 转换为瞬时授权方法. 例如在form中包含用户授权证据作为cookie之外的验证.
申请认证URI的参数(client_id, redirect_uri)如果在redirect_uri中注入攻击者提供的authorization_code, 模型仿真会终止在Authorization Server的变迁validate token执行过程中, 不会访问资源服务器上的资源. 这说明从浏览器安全角度考虑, OAuth协议在redirect_uri中引入state参数可以防范CSRF攻击. 如果没有state参数, 攻击者可能导致客户端访问错误的资源.
6 小结本文列举了主要的几种Web安全开放协议, 绘制了OAuth协议时序图, 使用CPN对OAuth2.0协议的授权码模式进行层次化建模. OAuth2.0协议的模型包括顶层模型、Resource Owner模型、Authorization Server模型和Resource Server模型. 并使用Petri网仿真工具CPNTools对OAuth2.0协议进行了仿真分析, 直观地展现协议运行过程和防范CSRF攻击的特点.
[1] |
The OAuth 2.0 authorization protocol (draft-ietf-oauth-v2-16). http://tools.ietf.org/html/draft-ietf-oauth-v2-16. [2011-05-19].
|
[2] |
Recordon D, Reed D. OpenID 2.0: A platform for user-centric identity management. Proceedings of the 2nd ACM Workshop on Digital Identity Management. Alexandria, VA, USA. 2006. 11–16.
|
[3] |
胡刚, 郭文奇, 戚前方. IAM安全技术在开放平台系统管理的应用. 计算机工程, 2005, 31(S1): 192-194. |
[4] |
李馥娟. 基于OAuth的开放授权技术及在云计算中的应用. 计算机系统应用, 2015, 24(4): 228-232. |
[5] |
夏晔, 钱松荣. OpenID身份认证系统的认证等级模型研究. 微型电脑应用, 2011, 27(4): 7-9. |
[6] |
刘润达, 王卷乐, 杜佳. OpenID: 一种开放的数字身份标识管理及其认证框架. 计算机应用与软件, 2008, 25(12): 127-129. DOI:10.3969/j.issn.1000-386X.2008.12.043 |
[7] |
Kumar S, Spafford E H. A software architecture to support misuse intrusion detection [Technical Report]. CSD-TR-95-009. West Lafayette, USA: Purdue University, Department of Computer Sciences, 1995.
|