潘 焱
(上海市数字证书认证中心有限公司 上海 200040)
由于云计算中的用户认证与权限管理与传统网站的认证方式相比要复杂的多,因此服务、平台、基础设施之间的认证授权也逐步成为制约云发展的安全需求。2011年5月发布的OAuth 2.0的草案,较好的解决了云时代用户认证与授权的问题,虽然推出时间不长,但已成为行业内应用最广泛的标准之一。OAuth 2.0是在OpendID的基础上提出的。OpenID就是将用户的密码安全的存储在一个OpenID 服务网站上,其它网站都可通过OpenID来验证用户身份。OpenID的提出,在很大程度上解决了用户在每个网站都需要注册用户名和密码的问题,IDP(身份提供者 Identity Provider)是解决这一问题的关键角色。随着云时代的到来,仅仅解决用户认证已经不能满足应用的需求了,OAuth协议就是适应这一需求而推出的。OAuth规范侧重解决用户的授权问题,包括四种授权类型。本文针对其中应用比较广泛的Authorization Code模式提出了基于数字证书的IDP改进模型。
OAuth2.0规定了四种授权模式,比较常用的是认证码授权模式认证(authorization code grant type)。这种模式的核心是通过认证码与重定向URI的配合,使客户端可以获得访问令牌(access tokens),从而使得客户端可获得授权访问资源,其基本步骤如下:
(1)客户端通过将终端用户的用户代理软件(一般为浏览器)引导到认证授权服务器发起这个流程。客户端将标识符(client identifier)、请求作用域(requested scope)、本地状态(local state),和一个重定向URI(在访问被许可或被拒绝后授权服务器会重新将用户代理软件引导回这个URI)等信息发给认证服务器。
(2)授权服务器通过浏览器验证终端用户身份,并确定用户是否授权给了客户端。
(3)如果资源所有者进行了授权,授权服务器会根据重定向URI将浏览器引导回客户端。授权服务器传回一个授权码给客户端,用于进一步获取访问令牌。
(4)客户端在收到认证码后向认证服务器请求访问令牌access token。客户端需提交认证码与重定向URI
(5)认证服务器会校验认证码,并比较重定向URI是否与步骤C一致,如果一致则返回访问令牌,并返回刷新令牌(refresh token,该领牌可选,用于访问领牌过期后的重新申请).
图1 流程设计
如图1,改进后的认证码IDP服务流程如下:
(1)IDP为SaaS服务商及用户签发数字证书。考虑到实际应用的简便性,IDP可仅对需使用IDP服务的应用签发数字证书。
(2)SaaS服务商通过将终端用户的user-agent(一般为浏览器)引导到认证授权服务器发起这个流程。SaaS服务商将标识符(此处可使用数字证书序列号)、请求作用域、本地状态,和一个重定向URI(此处的URI无提前注册,可根据应用的实际需求进行调整)等信息签名后发给认证服务器。
(3)授权服务器通过浏览器验证终端用户身份(如有数字证书可用数字证书确认身份,也可使用动态口令、用户名密码等多种手段),并确定用户是否授权给了SaaS服务商。
(4)如果用户进行了授权, IDP传回一个授权码(该授权码使用数字证书进行加密)给SaaS服务商,用于进一步获取访问令牌。
(5)授权服务器会根据重定向URI将浏览器引导回SaaS服务商。SaaS服务商在收到认证码后进行签名,同时向认证服务器请求访问令牌access token。SaaS服务商需提交认证码与重定向URI(此处的URI无提前注册,可根据应用的实际需求进行调整)
(6)认证服务器会校验认证码、URI及其签名,如果通过则返回访问令牌,并返回刷新令牌(refresh token,该领牌可选,用于访问领牌过期后的重新申请).
(7)SaaS服务商可使用令牌获得用户信息或访问用户许可的资源。
本文对基本遵循OAuth 规范中的消息格式,仅对认证码请求消息进行了调整。增加了Time(时间),signature(签名)二个参数,修改了client_id的意义,将其改为使用证书序列号。Time选项是按ISO8601规范编码的时间,用于防止重放攻击;signature为SaaS服务商对认证码请求消息的数字签名。使用application/x-www-formurlencoded (注1)格式作为消息请求标准。其使用例子如下:
GET/authorize?response_type=code&client_id=s6Bh dRkqt3&state=xyz&redirect_uri=https%3A%2F%2Fclient%2 Eexample%2Ecom%2Fcb&time=2013-02-20T09:23:45&signat ure=Z2sh7lYcNuba4+L3uJErFdVltTreiDXk5Wl4O2XsJlmYwplm mu9uemyLuNXxJSBNRIlDS2RizU6PDJ0SGkThaxC1iqpQ1uqEEWgU 7Klr3/HqEvcn+7jXfKXHRw2MRjFlCkI1IZvAFE2hINicG3B5EO/wmTVHfE1OLgDPz0tVvnk= HTTP/1.1 Host: server.example.com
认证令牌请求消息是SaaS服务商利用认证码请求访问令牌。OAuth2.0的访问令牌请求主要包括授权类型、认证码、重定向URI。本模型增加了签名及时间参数。其编码方式与认证码请求消息一致。认证码请求响应、访问令牌响应等消息格式,本文未作修改。
本文提出了基于数字证书与OAuth2.0的 IDP改进模型,在原有OAuth2.0认证码授权的基础上,引入了IDP服务的概念。同时利用数字证书增强了原有OAuth2.0认证码授权过程的安全性。与原有模型相比(1)本模型提出IDP可对SaaS服务商及用户签发数字证书。数字证书的使用可使IDP对SaaS服务商有一个提前的认证过程。同使由于有了数字证书,IDP与SaaS服务商可使用点对点的加密,确保了认证过程中的身份防伪、信息保密等功能。(2)重定向URI是OAuth2.0协议中重要的参数,通过数字证书的使用,使得重定向URI无需提前注册,可根据实际需要发送,这样增加了应用开发的灵活性。(3)IDP本身提供用户身份认证服务接口,SaaS服务商可使用访问令牌获得用户信息。SaaS层所有的软件服务都可成为用户资源服务器,也都可成为用户授权的入口,因此在用户授权的前提下,云端所有的软件服务可实现用户数据共享
[1]《利用OpenID和OAuth 进行安全授权及风险防范的分析》刘为,郝梅
[2]《 云计算中的身份认证技术研究》余幸杰,高能,江伟玉
[3]《基于OpenID 的可兼容身份认证系统设计与实现》杨浩泉,皮冰锋,彭酉,杨华,邹纲,王主龙
[4] 《The OAuth 2.0 Authorization Protocol draft-ietfoauth-v2-23》
[注1] 《W3C.REChtml401-19991224》 Hors, A., Raggett, D.,and I.Jacobs, “HTML 4.01 Specification,” World Wide Web C onsortium Recommendation REC -html401-19991224, December 1999 (HTML).