Windows Azure AppFabric 入门教学系列 (五):初探Access Control Service
2012-03-22 11:56:30 来源:WEB开发网本文是Windows Azure AppFabric入门教学的第五篇文章。本文会对AppFabric中的Access Control Service(ACS)做初步的讲解。为了使后续的学习顺利进行请确保已浏览本教程的第一篇文章,并以按照该文完成了AppFabric项目和命名空间的创建。我们知道,AppFabirc由Service Bus 和 Access Control Service组成,在前一篇教程中我们已介绍过Service Bus,所以本文将简略的介绍如何使用ACS服务来确保安全性。 同时,因为本文会使用到SWT和OAuth协议,读者可以浏览本教程第四篇文章,以快速了解该协议。
前置条件
为了使后续的教程能够顺利进行,请确保如下软件或组件已被安装:
· Microsoft .NET Framework 3.5 SP1
· Microsoft Visual Studio 2008 SP1 (or above)
· AppFabric SDK
· Windows Azure Platform Training Kit - December Update(示例代码)
请确保您已拥有一定的WCF编程经验,若没有,请浏览这里以快速的初步了解WCF。
最后请确保已创建了一个AppFabric项目和一个服务命名空间。请参考这里。
原理:
我们首先了解一下ACS的一般应用场景:
客户端请求 (1)并获得 (2)一个 SWT 令牌 。之后客户端使用该 SWT来调用服务(3),一旦被ACSAuthorizationManager成功验证, (4),便能访问到所需的服务方法。
代码:
在了解了通信原理之后,我们来看看具体代码是如何编写的。
1. 在Windows Azure Platform Training Kit - December Update (示例代码) 安装目录下,LabsIntroAppFabricAccessControlSourceEx01-UsingACWithSymmetricKeyBegin目录下,打开SymmetricKey.sln工程。
该工程已能正常运行,我们会在其基础上修改代码来让其与ACS集成。首先我们调试,查看一下在没有ACS时的运行情况。
右击Service项目,Debug->Start new instance,启动一个Service实例。
以同样方式启动一个Client实例,最终结果如下。
打开Service项目的Program.cs,我们看到程序代码只是简单的将IWeatherForecast服务挂载到http://localhost/weatherforecast之上。
而Client项目也只是简单通过该URI来访问所需服务。如下图。
注意:我们从最终结果看到Get3DaysForecast与Get10DaysForecast方法都能被访问到。
2. 修改服务以接受和验证AppFabric AC 令牌。
必须确保代码调用被检验的请求内容时,检查SWT令牌。一旦验证存在SWT,您必须检查其是否用合法的密钥签名过。在本例中,我们提供了ServiceAuthorizationManager类来实现验证逻辑。
2.1右击Service项目,Add->Existing item,进入SourceEx01-UsingACWithSymmetricKeyAssets,添加ACSAuthorizationManager.cs和TokenValidator.cs
2.2在Service项目Program.cs中加入如下粗体代码:
C#
public class Program { private const string ServiceNamespace = "{insert service namespace here}"; private const string TokenPolicyKey = "{insert token policy key here}"; private const string Audience = "http://localhost/weatherforecast"; private const string RequiredClaimType = "action"; private const string IssuerName = "https://{0}.accesscontrol.windows.net/"; public static void Main(string[] args)
将ServiceNamespace改为您在本教程第一篇文章中创建的服务命名空间。
2.3在Main函数中加入如下粗体代码,以使ACS验证流程植入到程序调用服务的流程中。一旦我们定制的ServiceAuthorizationManager 类被插入到WCF 管道中(pipeline),它在每次服务调用时自动执行。
host.AddServiceEndpoint(typeof(IWeatherForecast), binding, new Uri("http://localhost/weatherforecast")); host.Authorization.ServiceAuthorizationManager = new ACSAuthorizationManager( string.Format(IssuerName, ServiceNamespace), Audience, Convert.FromBase64String(TokenPolicyKey), RequiredClaimType); host.Open()
3.配置客户端使用 AppFabric Access Control来访问服务
更多精彩
赞助商链接