安全验证是移动应用开发中一个很重要的组成部分,Worklight 有着完善的安全验证框架,提供了多种形式的安全验证方式。本文将以 Worklight 5.0.3 版本为基础,首先介绍 Worklight 中安全验证的基本概念,然后,通过围绕一个示例,来介绍如何开发基于适配器的安全验证。
安全验证是应用开发中的一个重要的组成部分,对移动应用开发亦是如此,Worklight 作为一个业界领先的移动应用开发和管理平台,提供了完善的安全验证框架。
Worklight 安全验证框架中的基本概念
安全验证用于防止对某些特定资源的未经许可的访问,在 Worklight 中,我们使用其验证框架来保护 Worklight 中的 实体(entity),如 应用 ﹑ 适配器 以及 静态资源。
Worklight 提供了声明式的方式来配置保护规则,来实现对实体的未经授权的访问保护,声明规则由下面两个概念组成:
security test: 由一个或多个 ream 组成,用于保护 Worklight 的实体。 realm: realm 定义了处理用户验证的业务逻辑,它又由以下几个概念组成。 challenge han">dler:客户端组件,用于侦测服务器端是不是在发送一个需要安全验证的请求,如果是, 则收集用户身份信息,并发送至服务器端。 authenticator:服务器端组件,用于收集客户端发来的用户身份信息。 login module:服务器端组件,用于接收 authenticator 收集到的用户身份信息,验证该身份并创建用户身份对像。
Worklight 服务器端可以定义一个或多个 authenticator,authenticator 又分为下面三种类型:
基于
表单的 authenticator:用于基于表单的安全验证请求。默认实现为 com.worklight.core.auth.ext.FormBasedAuthenticator。 基于适配器的 authenticator:用于使用适配器过程(procedure,类似于 Java 方法或函数的概念)来 搜集和验证 用户身份。默认实现为 com.worklight.integration.auth.AdapterAuthenticator。 基于 HTTP 头的 authenticator: 同上述 authenticator 不一样,该 authenticator 并不需要由客户端提交用户身份信息,
而是直接从 HTTP 头中检查相关的属性值。
我们在多数情况下,仅需直接使用 Worklight 提供的 authenticator,如有复杂的情况,我们也可以使用 Java 来实现自己所需的 authenticator。在本例中,我们将使用基于适配器的 authenticator 的默认实现,下面接着介绍基于适配器的安全验证。
基于适配器的安全验证简介
在 Worklight 中,适配器用于 获取信息和执行动作,它可以连接多种类型的后台系统,如数据库﹑ Cast Iron 等,Worklight 可以通过调用适配器过程来连接第三方系统,并可执行相应的操作,图一为适配器请求流程示意图:
图 1. 适配器请求流程示意图
开发适配器主要就是开发适配器中的过程(procedure),过程是适配器中的核心组成部分,它提供了连接第三方系统并执行所需业务逻辑的能力。在开发时,我们需要在适配器的 XML 声明文件中声明该适配器中的过程,然后在 JavaScript 文件中来实现定义的过程,当然我们也可以使用 Java 来实现过程。在本例中,我们使用了 JavaScript 来实现过程。
在实际项目中,由于身份信息可能来源于第三方系统,如数据库﹑ LDAP 服务器等,此时,我们便希望能够使用适配器来连接第三方系统,正如前面的章节所述,Worklight 提供了基于适配器的安全验证能力。
需要注意的是,当使用基于适配器的安全验证方式时,我们可以在适配器中实现完整的身份验证逻辑,而此时,login module 并不是必须的,任何其他声明的 login module 将作为一个额外的身份验证逻辑在适配器执行后被调用。
同其他方式的安全验证流程类似,Worklight 在拦截到一个访问受保护资源的请求后,会首先检查该请求是否含有合法的用户身份,如果是,则给予访问权限,并返回请求的数据;如果没有合法的用户身份,则启动验证流程,只有在验证流程成功后,才能授予访问权限,返回请求的数据。如图 2 所示。
图 2. 基于适配器的安全验证处理流程图