首页 理论教育软件工程论文专集:系统实现与方法介绍

软件工程论文专集:系统实现与方法介绍

【摘要】:图3基于声明的认证流程图4基于声明的认证方式实现2.2.1STS实现图5为STS端WIF协议栈,我们的STS主要实现了方法GetScope[18]和GetOutputClaimsIdentity[19]。GetScope方法实现如下:表2安全令牌服务方法介绍GetOutputClaimsIdentity方法的实现如下:2.2.2应用程序实现图6是应用程序端的WIF协议栈。比如使用下面的代码把声明内容显示在页面上:2.2.3数据库实现声明数据库存储了用户声明信息,包括用户名、密码、邮件以及其他信息。

系统的核心为安全令牌服务,我们实现的令牌服务基于SQL Server数据库,它主要用于提供声明定义以及声明信息的存储,如图4所示。

图3展示了基于声明的认证的主要认证流程。

图3 基于声明的认证流程

图4 基于声明的认证方式实现

2.2.1 STS实现

图5为STS端WIF协议栈,我们的STS主要实现了方法GetScope[18]和GetOutputClaimsIdentity[19]

图5 安全令牌服务原理

所有方法的介绍功能简介见表2。

GetScope方法实现如下:

表2 安全令牌服务方法介绍

GetOutputClaimsIdentity方法的实现如下:

2.2.2 应用程序实现

图6是应用程序端的WIF协议栈。

图6 基于声明的认证客户端协议原理

应用程序中主要实现如下几类:

(1)令牌解析器。WIF提供了内置的令牌解析器[20]。应用程序中使用的解析器类型必须与STS端一致。

(2) STS身份解析器[21]。它主要用来验证颁发令牌STS身份,其配置如下:

在身份解析器中,我们可以验证令牌颁发者的身份标识。一般是通过验证其身份证书实现。

(3)声明的使用。获取到声明信息后,我们可以在线程的用户类中取得声明内容。比如使用下面的代码把声明内容显示在页面上:

2.2.3 数据库实现(www.chuimin.cn)

声明数据库存储了用户声明信息,包括用户名、密码、邮件以及其他信息。由于声明的类别可以是无限的,因此我们的数据库设计为支持无限种声明类型。数据库表设计如下所示:

(1)用户表。用户表中主要保存用户登记信息,主要内容为加密过的密码信息。

(2)操作类型表。操作类型表主要保存用户执行操作类型,比如获取声明、STS授权、数字证书检验等。

(3)声明定义表。声明定义表主要定义了系统中所用到的自定义声明类型,主要由声明名字、声明值类型、声明值转换器组成。声明值转换器是一个XML字段值,它定义了一个自定义的值转换器。这具转换器负责把声明值转换成系统可以使用的格式。

(4)用户声明对应表。由于用户与声明之间为多对多关系,我们建立了用户与声明之间的对应表。本表保存用户与声明之间的对应关系。

(5)用户日志表。用户日志表保存了用户操作日志,也包含操作错误信息。

(6)数据表关系图。表关系图如图7所示。

图7 基于声明的认证系统原型数据库设计

示例系统编写完成后,应用程序可以使用基于声明的方式进行认证和授权。在示例系统中,应用程序会把获取到的声明以列表的方式显示出来,如图8所示。

图8 基于声明认证的系统测试页面

2.2.4 联合身份认证支持

本示例可以扩展为支持联合认证。在Windows®Identity Foundation(WIF)中,它是通过 WS-联合身份验证模块(WS-FAM)提供对 ASP.NET 应用程序中联合身份验证的支持。联合身份验证允许一个信任域中的安全令牌服务(STS)向另一个信任域中的 STS 提供身份验证信息,前提是这两个域之间存在信任关系。这里的信任关系体现为数字证书之间的共享和传递。

图9为一个联合认证的例子。

图9 联合认证样例

(1)Fabrikam 信任域中的客户端向 Contoso 信任域中的信赖方(RP)应用程序发送请求。

(2) RP(应用程序)将该客户端重定向到Contoso信任域中的STS。此STS未能识别该客户端。

(3) Contoso STS将该客户端重定向到Fabrikam信任域中的STS,此信任域与Contoso信任域之间存在信任关系。

(4) Fabrikam STS会验证客户端的标识并向Contoso STS颁发安全令牌。

(5) Contoso STS使用Fabrikam令牌来创建其自己的可供RP(应用程序)使用的令牌并将其发送给RP(应用程序)。

(6) RP(应用程序)会从安全令牌中提取客户端的声明并做出授权决策