使用OAuth方式保护你的WCF Service(通过Azure ACS)

大家好,今天我们来分享一下在Windows Azure平台上如何保护你部署的WCF Service。

之前我有过一篇文章介绍Azure的Access Control Service(), 这里我们将要介绍如何来使用他保护部署在Azure云计算平台上面的应用程序或者是对外的Service。

在开始介绍之前,先来说明一下我们这里使用的ACS OAuth方式,这里我们用到的是ACS的Service Identities,并且使用Service Identities的密码作为访问WCF service的凭据,客户端只有通过验证(这里将会生成一个基于此密码的OAuth令牌,令牌含有用户名,创建时间,过期时间,验证的唯一标识等信息)才能够访问到我们部署好的service,提供了一种较为安全的方式。

好了,下面开始如何创建这样一个service,当然我们必须要有的Azure的账号(可以申请免费试用的账号),现在Azure还没有在中国正式release,所以注册稍微会麻烦一些,需要一个境外的电话和用于支付的信用卡(信用卡无需是境外的),你可以提供一个香港的电话或者联系微软的support来完成注册。

拥有账号之后请访问(windows.azure.com)访问Azure的管理页面,在这里我们可以部署自己的application, service,提供证书,使用各种服务和功能等等。具体的大家可以边看边试试。这里我们点击“服务总线,访问控制和缓存”按钮,点击访问控制(Access Control),并且创建一个访问控制的命名空间(如果已经创建好了,跳过这一步),最后单击工具栏的访问控制跳转到ACS的配置页面。

在左边的panel中选择Service Identities, 点击添加来创建一个新的indentity,按照描述信息依次键入名称,描述信息。在类型这一栏,我们选择密码方式作为我们的验证的credential, 并且输入你想设置的密码,完了设置有效时期和过期时间,点击保存按钮。这样你在ACS上的配置工作就完成了。

下面我们来做具体的代码编写工作,首先我们创建一个WCF Service,这个service将被ACS保护,并且通过验证才能访问它,为了简便我们这里仅仅创建几个简单的方法,例如获取用户的个人信息,添加新用户等方法,下面贴一段给大家看看,interface和User类的定义就不列举了,非常简单,大家可以通过下载完整sample来看更详细的信息。

[本示例完整源码下载]

免费下载地址在

用户名与密码都是

具体下载目录在 /2012年资料/7月/27日/使用OAuth方式保护你的WCF Service(通过Azure ACS)/

UserService.cs

public class UserService : IUserService   {       List<User> users = new List<User>();          /// <summary>        /// Add default users.        /// </summary>        public UserService()       {           User user = new User();           user.UserId = "1";           user.FirstName = "Jim";           user.LastName = "James";           User user2 = new User();           user2.UserId = "2";           user2.FirstName = "Nancy";           user2.LastName = "Wang";           users.Add(user);           users.Add(user2);       }          /// <summary>        /// Return all users.        /// </summary>        /// <returns></returns>        public List<User> GetAllUsers()       {           return users;       }          /// <summary>        /// Add a new user in user list.        /// </summary>        /// <param name="u"></param>        /// <returns></returns>        public bool AddNewUser(User u)       {           if (!users.Exists(e => e.UserId == u.UserId))           {               users.Add(u);               return true;           }           else           {               return false;           }       }          /// <summary>        /// Get user info by id.        /// </summary>        /// <param name="userId"></param>        /// <returns></returns>        public User GetUser(string userId)       {           if (users.Exists(e => e.UserId == userId))           {               return users.Find(f => f.UserId == userId);           }           else           {               User user = new User();               user.UserId = "";               return user;               }       }   }  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/f7cee97cecf44460ae594aa04b1b0b4e.html