WCF Membership and Role Provider
本文介绍的是如何使用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)上加上这么一句话
- [PrincipalPermission(SecurityAction.Demand, Role = "Administrator")]
意思是我们只允许Administrator Role的用户来调用GetDate这个方法
整个的代码为
- [PrincipalPermission(SecurityAction.Demand, Role = "Administrator")]
- public
string GetData(int
value) - {
- return
string.Format("You entered: {0}", value); - }

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

aspnet_regsql建立Membership 数据库。

完成后修改MyService里面的Web.config,在这里一定看好,不是MyClientApp,而是MyService的web.config
添加如下
- <connectionStrings>
- <add
name="WCFDemoConnection" - connectionString="Data Source=localhost;Initial Catalog=WCFDemo;User ID=sa;Password=9ijn)OKM;"
- providerName="Sql.Data.SqlClient"
/> - </connectionStrings>
- <roleManager
enabled="true"
defaultProvider="AspNetSqlRoleProvider"
> - <providers>
- <remove
name="AspNetSqlRoleProvider"
/> - <remove
name="AspNetWindowsTokenRoleProvider"
/> - <add
connectionStringName="WCFDemoConnection" - applicationName="WCFDemo"
- name="AspNetSqlRoleProvider"
- type="System.Web.Security.SqlRoleProvider"
/> - </providers>
- </roleManager>
- <membership
defaultProvider="AspNetSqlProvider"
> - <providers>
- <remove
name="AspNetSqlMembershipProvider"
/> - <add
connectionStringName="WCFDemoConnection" - applicationName="WCFDemo"
- minRequiredPasswordLength="2"
- minRequiredNonalphanumericCharacters="0"
- requiresQuestionAndAnswer="false"
- requiresUniqueEmail=" false"
- name="AspNetSqlProvider"
- type="System.Web.Security.SqlMembershipProvider "
- enablePasswordRetrieval="true"
- passwordFormat="Encrypted"
- maxInvalidPasswordAttempts="20"/>
- </providers>
- </membership>
- <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.
- <behaviors>
- <serviceBehaviors>
- <behavior>
- <serviceAuthorization
principalPermissionMode="UseAspNetRoles"
roleProviderName="AspNetSqlRoleProvider"> - </serviceAuthorization>
- <serviceMetadata
httpGetEnabled="true"
/> - <serviceDebug
includeExceptionDetailInFaults="false"
/> - <serviceCredentials>
- <clientCertificate >
- <authentication
certificateValidationMode="PeerOrChainTrust"
revocationMode="NoCheck"/> - <certificate
findValue="localhost"
storeLocation="LocalMachine"
storeName="My"
x509FindType="FindBySubjectName"
/> - </clientCertificate>
- <serviceCertificate
findValue="localhost"
storeLocation="LocalMachine"
storeName="My"
x509FindType="FindBySubjectName"
/> - <userNameAuthentication
userNamePasswordValidationMode="MembershipProvider" - membershipProviderName="AspNetSqlProvider"
/> - </serviceCredentials>
- </behavior>
- </serviceBehaviors>
- </behaviors>
在MyClientApp端进,Add Reference,自动生成web.config,
进行测试,输入正确的用户名密码
- try
- {
- ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
- client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None;
- client.ClientCredentials.UserName.UserName = "admin";
- client.ClientCredentials.UserName.Password = "Password";
- Response.Write(client.GetData(5));
- }
- catch (Exception ex)
- {
- Response.Write(ex.Message);
- }

输入另外User group内User1,
- try
- {
- ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
- client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None;
- client.ClientCredentials.UserName.UserName = "user1";
- client.ClientCredentials.UserName.Password = "Password";
- Response.Write(client.GetData(5));
- }
- catch (Exception ex)
- {
- Response.Write(ex.Message);
- }

WCF Membership and Role Provider的更多相关文章
- Azure开发者任务之六:使用WCF Service Web Role
在本文中,我们将会在local development fabric上创建一个WCF服务角色,然后在一个控制台应用程序中使用它. WCF服务角色可以让我们创建一个WCF服务,并且把它托管在Window ...
- MVC5+EF6 入门完整教程12--灵活控制Action权限
大家久等了. 本篇专题主要讲述MVC中的权限方案. 权限控制是每个系统都必须解决的问题,也是园子里讨论最多的专题之一. 前面的系列文章中我们用到了 SysUser, SysRole, SysUserR ...
- 【ASP.NET】编程点滴 :ASP.NET身份验证
ASP.NET实际开发中身份验证 是一个不可回避的问题.在相当一段长的时间内,由于不求甚解,我对这个话题似懂非懂.今天就对它做个简单的小结. Authentication and Authorizat ...
- SQLite简介
1.SQLite简介 SQLite第一个Alpha版本诞生于2000年5月. 至今已经有9个年头了. 而在今年的5月SQLite也迎来了一个新的里程: SQLite 3. SQLite官方网站: ht ...
- SharePoint2013基于Form(FBA)的AD认证登陆
来源于:http://www.haogongju.net/art/1964313 1. 使用SharePoint2013实现基于AD的Form认证,首先创建一个Web Application,步骤如下 ...
- MVC5+EF6 --自定义控制Action访问权限
本章主要讲解在MVC中灵活控制Action的访问权限: 本章所使用的示例表也是上一张所使用的TbUser.TbRole.TbUserRole: 最终的效果是针对任意一个Action或Controlle ...
- Membership三步曲之进阶篇 - 深入剖析Provider Model
Membership 三步曲之进阶篇 - 深入剖析Provider Model 本文的目标是让每一个人都知道Provider Model 是什么,并且能灵活的在自己的项目中使用它. Membershi ...
- 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 ...
- 从Membership 到 .NET4.5 之 ASP.NET Identity
我们前面已经讨论过了如何在一个网站中集成最基本的Membership功能,然后深入学习了Membership的架构设计.正所谓从实践从来,到实践从去,在我们把Membership的结构吃透之后,我们要 ...
随机推荐
- 浅析网站开发中的 meta 标签的作用
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- IIS6的SSL配置,如何配置SSL到登陆页,如何将SSL证书设置成受信任的证书
一. 申请证书1. 到受信任的机构申请 略 2. 到自建的证书服务器申请 a. 安装证书服务 通过控制面板中的“添加/删除程序”,选择“添加/删除Windows组件”.在Windows组件向导中找到“ ...
- Hadoop之父Doug Cutting
生活中,可能所有人都间接用过他的作品,他是Lucene.Nutch .Hadoop等项目的发起人.是他,把高深莫测的搜索技术形成产品,贡献给普罗大众:还是他,打造了目前在云计算和大数据领域里如日中天的 ...
- iOS GCD 与 NSOperationQueue
NSOperationQueue ios NSOperation vs. GCD StackOverflow: NSOperation vs. Grand Central Dispatch Blog: ...
- android 手电筒的实现
android手机用闪光灯做成手电筒的应用非常多,可是有的不能用. 后来发现是除了把 camera device的 flashmode设置成torch外还要打开预览: 以下是代码: MainActiv ...
- stm32上的Lava虚拟机开发进度汇报(3)
感觉遇到一个瓶颈了,这几天都没有什么进度. 前几天把函数和一些最基本的伪指令实现了一下,能跑一点仅使用了绘图函数的lav,但是函数调用的问题一直没解决. 后来发现是粗心漏写了个++,解决了函数调用的问 ...
- PI-安装SoapUI on Windows
SoapUI是测试webservice连通性的工具,请见博文:http://www.dekevin.com/?p=1807 当你下载好了SOAPUI的安装程序之后,就可以进行程序的安装了,怎么来进行S ...
- Codeforces Gym 100342J Problem J. Triatrip bitset 求三元环的数量
Problem J. TriatripTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100342/att ...
- C#.net 之货币转换
利用string.format 和cultureInfo 来进行转换 /// <summary> /// 输入Float格式数字,将其转换为货币表达方式 /// </summary& ...
- C++ Caption
主题 1. 设置控件的标题文本 2. 获取控件的标题文本 Caption属性 取得一个窗体的标题(caption)文字,或者一个控件的内容 红色的部分就是 Caption 标题 Set ...