本文介绍的是如何使用Membership 和 Role Provider 来控制 WCF 调用方法的权限。

比如我们有一个WCF Method 叫 GetData(int num),然后我们只允许Role = "Administrator"的用户来调用它,这就是本文要介绍的。

首先,我们先建立一个Solution,Solution里面有两个Project,一个是我们的WCF Service叫MyService,另外是一个客户端的Web Project,叫 MyClientApp, 在MyClientApp下有个Default.aspx,来调用MyService.

 

里面的MyService是默认建立的WCF Service,这里我们不介绍如何写一个简单的WCF 程序。

重要的是,在我们的方法GetData(int value)上加上这么一句话

  1. [PrincipalPermission(SecurityAction.Demand, Role = "Administrator")]

意思是我们只允许Administrator Role的用户来调用GetDate这个方法

整个的代码为

  1. [PrincipalPermission(SecurityAction.Demand, Role = "Administrator")]
  2.        public
    string GetData(int
    value)
  3.        {
  4.            return
    string.Format("You entered: {0}", value);
  5.        }

 

 

当运行Default.aspx的时候,我们看到这样的结果。

 

aspnet_regsql建立Membership 数据库。

完成后修改MyService里面的Web.config,在这里一定看好,不是MyClientApp,而是MyService的web.config

添加如下

  1. <connectionStrings>
  2.     <add
    name="WCFDemoConnection"
  3.          connectionString="Data Source=localhost;Initial Catalog=WCFDemo;User ID=sa;Password=9ijn)OKM;"
  4.          providerName="Sql.Data.SqlClient"
    />
  5.   </connectionStrings>

 

  1. <roleManager
    enabled="true"
    defaultProvider="AspNetSqlRoleProvider"
    >
  2.       <providers>
  3.         <remove
    name="AspNetSqlRoleProvider"
    />
  4.         <remove
    name="AspNetWindowsTokenRoleProvider"
    />
  5.         <add
    connectionStringName="WCFDemoConnection"
  6.              applicationName="WCFDemo"
  7.              name="AspNetSqlRoleProvider"
  8.              type="System.Web.Security.SqlRoleProvider"
    />
  9.       </providers>
  10.     </roleManager>
  11.     <membership
    defaultProvider="AspNetSqlProvider"
    >
  12.       <providers>
  13.         <remove
    name="AspNetSqlMembershipProvider"
    />
  14.         <add
    connectionStringName="WCFDemoConnection"
  15.              applicationName="WCFDemo"
  16.              minRequiredPasswordLength="2"
  17.              minRequiredNonalphanumericCharacters="0"
  18.              requiresQuestionAndAnswer="false"
  19.              requiresUniqueEmail=" false"
  20.              name="AspNetSqlProvider"
  21.              type="System.Web.Security.SqlMembershipProvider "
  22.              enablePasswordRetrieval="true"
  23.              passwordFormat="Encrypted"
  24.              maxInvalidPasswordAttempts="20"/>
  25.       </providers>
  26.     </membership>
  27.     <machineKey
    validationKey="0D9EA75EE7CEF839CACB3DBAC68F420060EC381F315C2C12A80DBBBE7A8ED02079B8371B0654F11549248F58E55B5E74051DC888BA978BE1D733CF452511ECB7 "
    decryptionKey="BD9A8F945ACCB35EAB54542B771D34CFFE01F026A5FC5857A4253FAA20EA207F"
    validation="SHA1"
    decryption=" AES"
    />

 

 

 

选择MyService的Project,然后进入到ASP.NET Web Site Administration Tool的界面,在里面建立两个Role,一个Administrator,一个是User

然后我们在建立两个User,一个是Administrator group里面的admin,密码Password,一个是User group里面的user1,密码是Password

 

 

在MyService\web.config,进行修改,这里我们暂时不做Certificate Check, 所以我们使用NoCheck.

  1. <behaviors>
  2.  
  3.       <serviceBehaviors>
  4.  
  5.         <behavior>
  6.           <serviceAuthorization
    principalPermissionMode="UseAspNetRoles"
    roleProviderName="AspNetSqlRoleProvider">
  7.           </serviceAuthorization>
  8.           <serviceMetadata
    httpGetEnabled="true"
    />
  9.           <serviceDebug
    includeExceptionDetailInFaults="false"
    />
  10.           <serviceCredentials>
  11.             <clientCertificate >
  12.               <authentication
    certificateValidationMode="PeerOrChainTrust"
    revocationMode="NoCheck"/>
  13.               <certificate
    findValue="localhost"
    storeLocation="LocalMachine"
    storeName="My"
    x509FindType="FindBySubjectName"
    />
  14.             </clientCertificate>
  15.             <serviceCertificate
    findValue="localhost"
    storeLocation="LocalMachine"
    storeName="My"
    x509FindType="FindBySubjectName"
    />
  16.             <userNameAuthentication
    userNamePasswordValidationMode="MembershipProvider"
  17.               membershipProviderName="AspNetSqlProvider"
    />
  18.           </serviceCredentials>
  19.         </behavior>
  20.       </serviceBehaviors>
  21.     </behaviors>

 

在MyClientApp端进,Add Reference,自动生成web.config,

进行测试,输入正确的用户名密码

  1. try
  2.            {
  3.                ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
  4.                client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None;
  5.                client.ClientCredentials.UserName.UserName = "admin";
  6.                client.ClientCredentials.UserName.Password = "Password";
  7.                Response.Write(client.GetData(5));
  8.            }
  9.            catch (Exception ex)
  10.            {
  11.                Response.Write(ex.Message);
  12.            }

 

输入另外User group内User1,

  1. try
  2.             {
  3.                 ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
  4.                 client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None;
  5.                 client.ClientCredentials.UserName.UserName = "user1";
  6.                 client.ClientCredentials.UserName.Password = "Password";
  7.                 Response.Write(client.GetData(5));
  8.             }
  9.             catch (Exception ex)
  10.             {
  11.                 Response.Write(ex.Message);
  12.             }

 

 

 

WCF Membership and Role Provider的更多相关文章

  1. Azure开发者任务之六:使用WCF Service Web Role

    在本文中,我们将会在local development fabric上创建一个WCF服务角色,然后在一个控制台应用程序中使用它. WCF服务角色可以让我们创建一个WCF服务,并且把它托管在Window ...

  2. MVC5+EF6 入门完整教程12--灵活控制Action权限

    大家久等了. 本篇专题主要讲述MVC中的权限方案. 权限控制是每个系统都必须解决的问题,也是园子里讨论最多的专题之一. 前面的系列文章中我们用到了 SysUser, SysRole, SysUserR ...

  3. 【ASP.NET】编程点滴 :ASP.NET身份验证

    ASP.NET实际开发中身份验证 是一个不可回避的问题.在相当一段长的时间内,由于不求甚解,我对这个话题似懂非懂.今天就对它做个简单的小结. Authentication and Authorizat ...

  4. SQLite简介

    1.SQLite简介 SQLite第一个Alpha版本诞生于2000年5月. 至今已经有9个年头了. 而在今年的5月SQLite也迎来了一个新的里程: SQLite 3. SQLite官方网站: ht ...

  5. SharePoint2013基于Form(FBA)的AD认证登陆

    来源于:http://www.haogongju.net/art/1964313 1. 使用SharePoint2013实现基于AD的Form认证,首先创建一个Web Application,步骤如下 ...

  6. MVC5+EF6 --自定义控制Action访问权限

    本章主要讲解在MVC中灵活控制Action的访问权限: 本章所使用的示例表也是上一张所使用的TbUser.TbRole.TbUserRole: 最终的效果是针对任意一个Action或Controlle ...

  7. Membership三步曲之进阶篇 - 深入剖析Provider Model

    Membership 三步曲之进阶篇 - 深入剖析Provider Model 本文的目标是让每一个人都知道Provider Model 是什么,并且能灵活的在自己的项目中使用它. Membershi ...

  8. Developing a Custom Membership Provider from the scratch, and using it in the FBA (Form Based Authentication) in SharePoint 2010

    //http://blog.sharedove.com/adisjugo/index.php/2011/01/05/writing-a-custom-membership-provider-and-u ...

  9. 从Membership 到 .NET4.5 之 ASP.NET Identity

    我们前面已经讨论过了如何在一个网站中集成最基本的Membership功能,然后深入学习了Membership的架构设计.正所谓从实践从来,到实践从去,在我们把Membership的结构吃透之后,我们要 ...

随机推荐

  1. jQuery弹性滑动导航菜单实现思路及代码

    <!DOCTYPE HTML> <html> <head> <meta charset="UTF-8" /> <meta na ...

  2. C#学习笔记(五):泛型

    认识泛型 泛型使类型参数化,从而实现了算法上的代码重用. 同时由于去掉了转换中装箱和拆箱的操作,使用泛型还可以提高程序的运行速度. 我们先看看C#自带的使用了泛型的类: using System.Co ...

  3. Selenium IDE 工具总结

    基本介绍: Selenium工具专门为WEB应用程序编写的一个验收测试工具. Selenium的核心:browser bot,是用JavaScript编写的. Selenium工具有4种:Seleni ...

  4. Bootstrap 列偏移\列嵌套\列排序

    1.列偏移 这个其实很简单就是通过一个样式类,通过.col-md-offset-*可以将列偏移到右侧.这些class通过使用*选择器将所有列增加了列的左侧margin.例如,.col-md-offse ...

  5. Cocos2d-x——Cocos2d-x 屏幕适配新解 – 兼容与扩展【转载】

    Cocos2d-x 屏幕适配新解 – 兼容与扩展 本文出自[无间落叶](转载请保留出处):http://blog.leafsoar.com/archives/2013/05-13-08.html 在读 ...

  6. Spring-AOP和AspectJ的区别和联系

    AOP是Spring框架的重要组成部分.目前我所接触的AOP实现框架有Spring AOP还有就是AspectJ(还有另外几种我没有接触过).我们先来说说他们的区别: AspectJ是一个比较牛逼的A ...

  7. Redis命令小细节

    1.  set   setnx   setex set  将字符串 value的值关联到key ,假设key已经存在,那么覆盖原来的,假设不存在.那么就创建 setnx  将key的值设置为value ...

  8. NAT的全然分析及其UDP穿透的全然解决方式

    NAT的全然分析及其UDP穿透的全然解决方式   一:基本术语 防火墙 防火墙限制了私网与公网的通信,它主要是将(防火墙)觉得未经授权的的包丢弃,防火墙仅仅是检验包的数据,并不改动数据包中的IP地址和 ...

  9. Codeforces Round #331 (Div. 2) A. Wilbur and Swimming Pool 水题

    A. Wilbur and Swimming Pool Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/conte ...

  10. Android - FrameLayout覆盖顺序

    FrameLayout覆盖顺序 本文地址: http://blog.csdn.net/caroline_wendy FrameLayout: Child views are drawn in a st ...