WEB开发网
开发学院服务器云计算 Windows Azure AppFabric 入门教学系列 (五):初探... 阅读

Windows Azure AppFabric 入门教学系列 (五):初探Access Control Service

 2012-03-22 11:56:30 来源:WEB开发网   
核心提示:本文是Windows Azure AppFabric入门教学的第五篇文章,本文会对AppFabric中的Access Control Service(ACS)做初步的讲解,Windows Azure AppFabric 入门教学系列 (五):初探Access Control Service,为了使后续的学习顺利进行请确

本文是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来访问服务

1 2 3  下一页

Tags:Windows Azure AppFabric

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接