Web 服务和无线应用程序
安全
性
Web 服务将在移动商务和无线安全性的发展中起着重要作用。通过使用 XML 消息传递对主要安全性解决方案(如 Kerberos 认证和授权、数字证书、数字
签名和公/私钥加密)进行标准化和集成,Web 服务可以用来提供无线安全性解决方案。XML 消息传递被认为是无线通信协议的首选,有多种安全性协议用于基于它的无线应用程序。其中包括以下协议:
一、安全性断言标记语言(Security Assertion Markup Language,SAML)是用来以 XML 消息传输认证和授权信息的协议。它可以用来提供单点登录 Web 服务。
二、XML 数字签名定义了如何对 XML 文档的一部分或全部内容进行数字签名,以保证数据完整性。可以用 XML 密钥管理规范(XML Key Management Specification,XKMS)格式封装使用 XML 数字签名分发的公钥。
三、XML 加密允许应用程序引用预先约定的对称密钥来加密 XML 文档的部分或全部内容。
四、Web 服务安全 XML 协议簇(WS-Security)是由 IBM 和 Microsoft 认可的向 Web 服务提供安全性的完整的解决方案。它基于 XML 数字签名、XML 加密和类似于 SAML 的认证和授权方案。
以上所有安全性协议都可以绑定到 Web 服务消息传递协议。例如,我们可以将 SAML 段嵌入到 SOAP 消息头以对所请求的服务的访问进行认证和授权。我们还可以将 XML Digital Signature 段嵌入到 SOAP 头以认证该消息中的信用卡号。
现在,我们要讨论将位置信息与 SAML 安全性规范合并到一起的好处,并研究它是如何增强无线应用程序安全性的。尤其我们要讨论基于位置的认证是如何加入单点登录体系结构的。
与 SAML 合作的位置信息
SAML 是对供应商中立的 XML 框架,用于在因特网上交换安全性信息。SAML 使全异的安全性服务系统能够通过交换与安全性相关的信息(称为“断言”)来进行互操作。用户的认证、授权、概要和首选项,都是从用户在会话期间
选择的原始源服务供应商传送到后续的目的地服务供应商的。SAML 被设计用来与 HTTP、简单邮件传送协议(Simple Mail Transfer Protocol)、文件传送协议和几种 XML 框架(包括简单对象访问协议(Simple Object Access Protocol,SOAP)和电子商务 XML)一起
工作。它提供了以 XML 文档定义用户认证、授权和属性信息的标准方式。SAML 的主要组件包括:
1.断言。SAML 定义了三种断言类型,都是关于用户(人或计算机)的一个或多个事实的声明。认证断言要求用户证实自己的身份。属性断言包含关于用户的特定
细节,如他的信用额度。授权判定断言标识了用户可以做什么(例如,是否授权该用户购买某种产品)。
2.请求/响应协议。这个协议定义了 SAML 请求和接收断言的方式。例如,SAML 目前支持 HTTP 上的 SOAP。将来,SAML 请求和响应格式将绑定到其它通信和传输协议。
3.绑定。这个组件确切地详细描述了 SAML 请求应如何映射到诸如 HTTP 上的 SOAP 消息交换之类的传输协议。
4.概要。这些组件规定了如何将 SAML 断言嵌入通信系统或在通信系统之间传递。 尽管 SAML 进行关于凭证的断言,但实际上它并不对用户进行认证或授权。那是由认证服务器和轻量级目录访问协议(Lightweight Directory Access Protocol)目录一起完成的。SAML 创建到实际认证的链接并根据该事件的结果进行其断言。简单来说,SAML 支持基于 Web 的开放和可互操作的设计、单点登录服务
功能。基于 SAML 的应用程序的体系结构如下所示。
图 2. SAML 体系结构
在典型的 SAML 体系结构中,称为信任方的符合 SAML 的服务将 SAML 请求发送到发行认证机构,该机构返回 SAML 断言响应。所有请求和响应都是通过 HTTP 用 SOAP 封装传送的,但应用程序可以用各种请求/响应协议定义和交换断言。但是,这些扩展会限制互操作性。例如,当移动设备
客户机请求访问后端应用程序时,它向发行认证机构发送认证信息。然后,发行认证机构可以根据移动设备客户机提供的凭证发送
肯定或否定认证断言。尽管用户仍然拥有与无线应用程序的会话,但是发行认证机构可以使用更早的引用来发送认证断言,声明用户实际上是在特定时间内使用特殊的方法认证的。正如先前提到的,基于位置的认证可以定期进行,这意味着只要对用户凭证的认证是肯定的,发行认证机构就会定期发表基于位置的断言。研究下面的 SAML 认证请求。它包含用户凭证(如用户名和加密密码)、认证方法、响应请求、凭证类型和位置信息。
<samlp:Request MajorVersion="1" MinorVersion="0"
RequestID="<request id>">
<samlp:RespondWith>AuthenticationStatement </samlp:RespondWith>
<samlp:AuthenticationQuery>
<saml:Subject>
<saml:NameIdentifier Name="<user name>"/>
<saml:SubjectConfirmation>
<saml:ConfirmationMethod>
http://www.oasis-open.org/committies/security/docs/
draft-sstc-core-5/password
</saml:ConfirmationMethod>
<saml:SubjectConfirmationData>
<password>
</saml:SubjectConfirmationData>
</saml:SubjectConfirmation>
<saml:NameIdentifier Name="<location>" />
<saml:SubjectConfirmation>
<saml:ConfirmationMethod>
<LocationURI> <-- For authenticating location information using
a SAML binding profile -->
</saml:ConfirmationMethod>
<saml:SubjectConfirmationData>
<latitude>, <;longitude>,<timestamp>,
</saml:SubjectConfirmationData>
</saml:SubjectConfirmation>
</saml:Subject>
</samlp:AuthenticationQuery>
</samlp:Request>
对上述请求的响应(如下所示)包含带有指定认证有效的时间段的属性/条件的认证断言。如果请求中提供的认证信息导致成功的认证,那么就向认证请求方返回一个表示成功的状态码。
<samlp:Response InResponseTo="<request id>"
MajorVersion="1" MinorVersion="0"
ResponseID="upuSGdmqx7ov01mExYlt+6bDCWE=">
<samlp:Status>
<samlp:StatusCode Value="samlp:Success"/>
</samlp:Status>
<saml:Assertion AssertionID="+1UyxJDBUza+ao+LqMrE98wmhAI="
IssueInstant="2002-10-03T14:33:58.456" Issuer="SunONE"
MajorVersion="1" MinorVersion="0">
<saml:Conditions NotBefore="2002-10-03T14:33:58.466"
NotOnOrAfter="2002-10-03T15:03:58.466"/>
<saml:AuthenticationStatement
AuthenticationInstant="2002-10-03T14:33:55.201"
AuthenticationMethod="http://www.oasis-open.org/committies/security/
docs/draft-sstc-core-25/password">
<saml:Subject>
<saml:NameIdentifier Name="<user>" />
<saml:SubjectConfirmation>
<saml:ConfirmationMethod>
http://www.oasis-open.org/committies/security/docs/
draft-sstc-core-25/password
</saml:ConfirmationMethod>
</saml:SubjectConfirmation>
</saml:Subject>
</saml:AuthenticationStatement>
<saml:AuthenticationStatement
AuthenticationInstant="2002-10-03T14:33:55.205"
AuthenticationMethod="<LocationURI>" >
<saml:Subject>
<saml:NameIdentifier Name="<location>" />
<saml:SubjectConfirmation>
<saml:ConfirmationMethod>
<LocationURI>
</saml:ConfirmationMethod>
</saml:SubjectConfirmation>
</saml:Subject>
</saml:AuthenticationStatement>
</saml:Assertion>
</samlp:Response>