当前位置:必发365电子游戏 > 编程 > 必发365电子游戏正文将向您来得如何用二个Web服务来包装ASP.NET,你能够定义况兼让该Web服务暴光逻辑接口
必发365电子游戏正文将向您来得如何用二个Web服务来包装ASP.NET,你能够定义况兼让该Web服务暴光逻辑接口
2019-12-19

风华正茂、方案布局

开卷提要 在缺省气象下,你不能不动用Visual Studio 2006的多少个本机实例来管理与ASP.NET 2.0联手发行的SQL Server数据库中的安全凭证。本文将向您来得什么用三个Web服务来包装ASP.NET 2.0提供者并因此选择叁个Windows表单应用程序来管理凭证存款和储蓄从而扩大这种管理技能。

  本方案构造很简短——它用贰个Web服务来包装ASP.NET 2.0提供者并且为远程顾客暴光该证据管理,你居然仍可以在该布局中加上有的错失的功力。然后,在提供三个增多的客商接口和周密凭证管理经历的还要,使用一个Windows表单应用程序来花费该Web服务。该Web服务配置文件将包含特定于该证据存款和储蓄的指令。但是,那实在乎味着全数由该Web服务管理的应用程序都将得以分享这一个指令。

  前段时间,无论是互连网可能集团内部局域网程序通常都务求运用定制的法子来囤积和拘留客户帐户和角色。为此,ASP.NET 2.0提供了三个现存的提供者模型和三个SQL Sever数据库。不幸的是,只可以通过Visual Studio 二零零六来管理该证据数据库且只好针对本机Web应用程序。那实乃可怜不便于何况不可能遍布运用的。

  就算你能够开头到尾地营造该Web服务,也便是说,首先用静态方法Roles和Membership来包装它们并定义该Web服务,作者却更欣赏生机勃勃种左券驱动的措施:首先设计实践各个操作的最佳接口将是什么样,并且直到必要时才思量什么完结它们。那样做能够保险由Web服务揭发的接口协理具备必要的保管功效并且还将压缩该客商应用程序与其他达成细节(举例包装提供者卡塔尔之间的耦合。

  本文描述了三个极品客商能够行使的一点一滴定制的安全管理应用程序。那么些应用程序通过用两个WEB服务对ASP.NET 2.0提供者进行了包装并扩大了少年老成部分职能。本文详细描述了中间的安顿性方法,面前遭遇的题目和含有在应用程序中的本领。同期还向您介绍了有个别有用而有力的技能,如依照接口的Web服务,基于反射的Web服务宽容性,高级C# 2.0编制程序,Web服务安全性和Web服务事业等。

   ASP.NET 2.0的二个越来越好的性状是它补助Web服务接口,你可以定义而且让该Web服务暴光逻辑接口,就象类的显现风流罗曼蒂克致。为此,你要求用 WebServiceBinding属性修饰你的接口况兼经过WebMethod属性来暴露单个的接口方法。然后,你将有二个派生于这些接口的类并贯彻该接口,并且编译器将供给你援救该接口的持有办法。

  风流罗曼蒂克、ASP.NET 2.0信物底蕴构造

  为了管住和相互作用于凭证存储和Web服务配置,小编定义了5个接口-IApplicationManager,IMembershipManager,IPasswordManager,IroleManager和IUserManager。

  基于网络的应用程序平常不正视Windows帐户和组,而是依附于依靠表单的证实并整合某种如SQL Server的后台定制凭证存储。为了救助开采者免除重复设计和创设那样的解决方案,ASP.NET 2.0批发中出席了多少个现成的莱芜凭证功底布局。ASP.NET 2.0证据存储并不唯有可用于ASP.NET应用程序,而且ASP.NET Web服务和Windows表单应用程序都能运用它来治本它们的客商凭证。其余,Windows通信功底(编码名称为Indigo卡塔尔服务也能被轻巧地安装来行使ASP.NET 2.0药到病除凭证存款和储蓄。

  (一) IApplicationManager

  ASP.NET 2.0使用生龙活虎提供者模型来拜访和拘禁凭证避防止把应用程序耦合到任何特定期存款款和储蓄上。在运用抽象提供者模型的帮助和益处的还要由程序猿来开拓那个应用程序。一流客户承受选用和管制特定的凭据存款和储蓄。图1显得出ASP.NET 2.0丹青妙手提供者的构造。

  该IApplicationManager接口突显于所附源码中的列表2,允许管理员删除一点名的应用程序-也便是说,从数据库中剔除全数到它的参阅何况删除它的具备顾客和角色。IApplicationManager允许从存款和储蓄中除去全体的应用程序,並且它能回来在该存款和储蓄中的全部应用程序的二个列表。注意,那么些接口作为三个里头的接口被定义-public或internal可以知道性修饰词对Web服务接口都以空泛的。该接口上的每一种方法用 WebMethod属性加以修饰并有贰个该措施的简便描述。此外,存取凭证存储的兼具办法都被设置为使用事务处理。那样的话,二种操作-如删减一应用程序和创造风度翩翩客商将要相互完全隔开分离的事态下履行,进而确定保障了如删减全数客商等繁琐操作的原子性。.NET 2.0中的Web服务只可以运维三个新业务,并且它是由WebMethod属性的TransactionOption属性来支配的。最终一点是把 WebServiceBinding属性应用于接口上。那就钦点该接口是三个客商和劳务都能绑定到的Web服务接口。为了把该接口以一个WSDL左券情势暴光给外部,你须要动用八个shim类。这几个shim类的安排性是必备的,因为您不可能把一个接口作为风流倜傥Web劳动洞穿,况且你也无法在其上应用 Web瑟维斯属性。这些shim类还将路过WebService属性为该接口命名空间定义。上边包车型客车代码显示了 IApplicationManagerShim抽象类的概念。

必发365电子游戏 1

[WebService(Name="IApplicationManager",
必发365电子游戏,Namespace="",
Description="IApplicationManager is used to manage
applications. This web service is only
the definition of the interface. You
cannot invoke method calls on it.")]
abstract class IApplicationManagerShim : IApplicationManager{
 public abstract void DeleteApplication(string application);
 public abstract string[] GetApplications();
 public abstract void DeleteAllApplications();
}

图1.ASP.NET 2.0安全提供者模型

  因为IApplicationManagerShim是三个类,所以你能够把它暴光为二个Web服务。因为它是风度翩翩抽象类且有着办法被定义为架空方法,所以不供给(也不能够)实现任何方法。为了使其看起来就象该接口,IapplicationManagerShim把WebService属性的性质名设置为 IApplicationManager(代替缺省的类名卡塔尔(قطر‎。今后,你能够运用IApplicationManager.asmx文件来拆穿该接口。

  Membership Provider肩负管理顾客,而Role Provider负担管理剧中人物。在证据存储中,各个顾客或剧中人物只限于一应用程序之内。那样就允许分化应用程序使用相似的凭据存款和储蓄而不会与互为的顾客名或剧中人物相冲突。ASP.NET为SQL服务器、Windows和平运动动目录(见图1卡塔尔国等的凭证存款和储蓄提供协理。为了设置SQL Server凭证数据库,能够运作aspnet_regsql.exe程序,其岗位是:

<%@ WebService Language="C#"
CodeBehind="~/App_Code/IApplicationManagerShim.cs"
Class="IApplicationManagerShim"%>

<WINDOWS>Microsoft.NETFramework<version>

  现在,假设你浏览到IApplicationManager.asmx页面,你就能够看见该接口定义。你能够运用WSDL.exe的serverInterface选项来把接口定义输入到客户端或其余其余想绑定到该接口定义上的劳务。

  这些安装程序创立四个名称叫aspnetdb的新数据库-它包括蓬蓬勃勃组应用程序的表、顾客、剧中人物以至存取那个表的存放进程。那个SQL Server数据库是应用最新的平安技艺通过精心设计的。其余,ASP.NET 2.0还提供少年老成套相应于提供者的类(图1)。

  (二) IMembershipManager

  使用哪个提供者的新闻被保存在应用程序的结构文件(App.Config或Web.Config卡塔尔中。你差不离无需直接与一定的提供者进行互相;而是,存在八个静态助理类:Membership和Roles-它们承当从构造文件中读取使用哪个提供者。暗中认可的提供者(即当未有一点名提供者时)正是SQL Server。Membership类(列表1卡塔尔(英语:State of Qatar)允许你创制和删除客商,检索有关客户的信息并察看口令计策。

  IMembershipManager接口(见所附源码中的列表3卡塔尔国允许你管理客户帐户的有着地点-创建和删除客商帐户,更新客商帐户,检索客户帐户细节以致查找在一应用程序中的全数客商。

  列表1: Membership助理类

  (三) IRoleManager

[Serializable]
public class MembershipUser{
 public virtual bool ChangePassword(string oldPassword,string newPassword);
 public virtual string GetPassword(string passwordAnswer);
 public virtual string ResetPassword(string passwordAnswer);
 public virtual bool UnlockUser();
 //此外成员
}
public static class Membership{
 public static string ApplicationName{get;set;}
 public static MembershipUser CreateUser(string username, string password);
 public static MembershipUser CreateUser(string username,
 string password, string email, string passwordQuestion,
 string passwordAnswer, bool isApproved, out MembershipCreateStatus status);
 public static bool DeleteUser(string username,bool deleteAllRelatedData);
 public static MembershipUser GetUser(string username);
 public static void UpdateUser(MembershipUser user);
 public static bool ValidateUser(string username,string password);
 public static bool EnablePasswordReset{get;}
 public static bool EnablePasswordRetrieval{get;}
 //其余成员
}

  IRoleManager接口允许你管理逻辑角色的持有地点-创设和删除剧中人物,从剧中人物中加进和删除客商以至查找在一应用程序中的全部剧中人物。

  比方,为了在"MyApp"应用程序中创设后生可畏新客商,你仅需如下编码:

[WebServiceBinding("IRoleManager")]
interface IRoleManager{
[WebMethod(...)]
void CreateRole(string application,string role);
[WebMethod(...)]
bool DeleteRole(string application,string role,bool throwOnPopulatedRole);
[WebMethod(...)]
void AddUserToRole(string application,string userName, string role);
[WebMethod(...)]
void DeleteAllRoles(string application,bool throwOnPopulatedRole);
[WebMethod(...)]
string[] GetAllRoles(string application);
[WebMethod(...)]
string[] GetRolesForUser(string application,string userName);
[WebMethod(...)]
string[] GetUsersInRole(string application, string role);
[WebMethod(...)]
void RemoveUserFromRole(string application,string userName, string roleName);
//越来越多成员
}

Membership.ApplicationName = "MyApp";
Membership.CreateUser("MyUser","MyPassword",...);

  (四) IPasswordManager

  Roles类允许你创制和删除客商角色,从剧中人物中增进或删除客商,检索顾客的剧中人物会员消息以至表达剧中人物会员。上边是此类的定义:

  那几个IPasswordManager接口首要提供与应用程序口令攻略相关的只读音信。

public static class Roles{
 public static string ApplicationName{get;set;}
 public static void CreateRole(string roleName);
 public static bool DeleteRole(string roleName, bool throwOnPopulatedRole);
 public static void AddUserToRole(string username, string roleName);
 public static void RemoveUserFromRole(string username, string roleName);
 public static string[] GetAllRoles();
 public static string[] GetRolesForUser(string username);
 public static string[] GetUsersInRole(string roleName);
 public static bool IsUserInRole(string username, string roleName);
 //此外成员
}

[WebServiceBinding("IPasswordManager")]
interface IPasswordManager{
[WebMethod(...)]
bool EnablePasswordReset(string application);
[WebMethod(...)]
bool EnablePasswordRetrieval(string application);
[WebMethod(...)]
string GeneratePassword(string application,int length,
int numberOfNonAlphanumericCharacters);
[WebMethod(...)]
bool RequiresQuestionAndAnswer(string application);
[WebMethod(...)]
string ResetPassword(string application,string userName);
[WebMethod(...)]
string GetPassword(string application,string userName,string passwordAnswer);
[WebMethod(...)]
void ChangePassword(string application,string userName,string newPassword);
//越来越多成员
}

  比如,要把剧中人物"Manager"增加到应用程序"MyApp"上,你能够如下编码:

  规范地,该政策存款和储蓄在应用程序的配置文件中。该攻略满含是或不是运营口令重新苏醒设置和探求,口令强度和口令回答战术等。你也能够利用 IpasswordManager来生成后生可畏对应于该口令强度攻略的新口令。别的,IpasswordManager可用于重新设置、更改或探求一点名客商的口令。

Roles.ApplicationName = "MyApp";
Roles.CreateRole("Manager");
**二、管理凭证存款和储蓄

  (五) IUserManager

**  假使您选择采取Windows或移动目录来囤积你的应用程序的客户和角色,那么您需求选用相应于那些囤积的工具来保管,例如计控面板小程序或挪动目录工具。其实,真正的难点在于怎么样保管存款和储蓄在SQL Server中的凭证。为此,你能够使用Visual Studio 二〇〇六和一个Web浏览器,以至无需设置IIS。在大器晚成ASP.NET Web工程中,从"Website"菜单下抉择"ASP.NET配置"。那将使得Visual Studio宿主一个Web服务器,张开风华正茂可用的端口还要导航到意气风发套管理页面(见图2卡塔尔。那一个处理页面修正该Web应用程序配置文件同期也得以管理凭证存款和储蓄(当不选取Windows认证时卡塔尔国。当使用Visual Studio 二〇〇七时,你首先要求选拔认证项目。你可以选拔Windows或表单认证(网络存取卡塔尔国。假诺您采取表单认证,你还足以进行下列操作:

  IUserManager接口允许校验客商凭证,检索剧中人物身份以致获得钦定客商是其成员之生龙活虎的具有剧中人物。该接口用于测验和解析指标。

  ·运营或打消基于角色的铜川

[WebServiceBinding("IUserManager")]
public interface IUserManager{
[WebMethod(...)]
bool Authenticate(string applicationName,string userName, string password);
[WebMethod(...)]
bool IsInRole(string applicationName,string userName, string role);
[WebMethod(...)]
string[] GetRoles(string applicationName,string userName);
}
二、AspNetSqlProviderService Web服务

  ·创造和删除剧中人物

  显示在所附源码中的列表4中的 AspNetSqlProviderService类完结了四个Web接口。其进度就象完毕其余别的接口相通-你能够隐式或显式地派生并达成格局(见列表 4卡塔尔。作者是经过把那么些完毕简单地代理到提供者的相符的办法来促成该Web接口上的比较多办法的。在每贰遍接受剧中人物或地方早前,你必得为之作好打算-通过设置要运用的应用程序名。比方,为了贯彻IRoleManager.CreateRole(卡塔尔,你将索要树立:

  ·创设和删除客户

void IRoleManager.CreateRole(string application,string role){
Roles.ApplicationName = application;
Roles.CreateRole(role);
}

  ·检索一客商的内部原因

  个中的风姿洒脱部分措施在调用该提供者前后还必要一点专门的工作。举个例子,如若开发银行口令检索,你不能不找寻客户口令,而AspNetSqlProviderService则用于判断它。

  ·设置风流罗曼蒂克客户的气象

string IPasswordManager.GetPassword(string application,string userName,
string passwordAnswer){
Membership.ApplicationName = application;
Debug.Assert(Membership.EnablePasswordRetrieval);
MembershipUser membershipUser =Membership.GetUser(userName);
return membershipUser.GetPassword(passwordAnswer);
}

  ·给客商赋于某剧中人物

  不过,还大概有部分主意并从未拿走提供者的第一手帮忙。有二种可能的解除办法-第朝气蓬勃种是尝尝并使用提供者的其它措施来成功所梦想的操作。第三种是平昔施行aspnetdb数据库。二种艺术都存在利弊。比方,能够思索达成MembershipManager.DeleteAllUsers(卡塔尔(قطر‎方法。你可以对该应用程序中的每一个客商调用身份提供者的DeleteUser(卡塔尔国方法,如列表4所示。首先你要调用 IMembershipManager.GetAllUsers(卡塔尔方法来赢得应用程序中的全数顾客。那就是您通过完成该接口的类来使用该接口方法的显式完毕形式。然后,你能够定义一个无名形式来删除客商,把该匿超方式赋值到一个Action<string>代理,並且动用Array类的静态方法 ForEach<T>(卡塔尔删除每一种客户。

  ·从剧中人物中去除顾客

public delegate void Action<T>(T obj);
public abstract class Array : ...
{
public static void ForEach<T>(T[] array,Action<T> action);
}

必发365电子游戏 2
图2.ASP.NET Web应用程序管理页面

  第蓬蓬勃勃种办法的亮点是其余与删除八个顾客相关的里边活动(如也删除全体的剧中人物身份卡塔尔(قطر‎如故被执行。其不足是,你须求对该数据库做更加多的调用。

  既然SQL Server是ASP.NET 2.0提供的独占鳌头的集团级定制凭证存款和储蓄,你能够独立选取Visual Studio 二零零五驱动的管住页面来管理aspnetdb数据库,而不用其余其余存款和储蓄。

  正如刚刚提到的,第三种艺术是直接对aspnetdb数据库编制程序。当提供者未有提供任何方法来实现此义务时,那是最有效的。举例,提供者并不帮忙删除一应用程序,更不说删除全数的应用程序了。尽管你能够编写制定一个存储进程来做这事情,但本人的另二个对象是不采纳aspnetdb,而是利用原始SQL命令来兑现IApplicationManager.DeleteApplication(卡塔尔(英语:State of Qatar)和 IApplicationManager.DeleteAllApplications(卡塔尔。小编已用三个AspNetDbTablesAdapter助理类(在这里并没有出示卡塔尔(قطر‎包装了那个命令。直接待上访谈数据库的帮助和益处是你仅实施八个下令;美中不足是,如若要转移数据库形式,你将急需转移你的代码。假定如删减全体的客商或一应用程序等操作是相近不涉及的同期拔尖客户的数目常常超级小,那么自个儿想最佳尽大概让AspNetSqlProviderService使用 ASP.NET 2.0提供者。

  三、内置成效的阙如

  (风流倜傥卡塔尔(قطر‎ 设置服务

  对于Visual Studio 二〇〇六使得的治本页面存在一些重大劣势:第豆蔻梢头,你必要Visual Studio 二零零五。应用程序或连串一级顾客或许未有Visual Studio 贰零零伍,更别讲哪些使用它了。缺省级地区级,该管理页面使用少年老成斜杠(/卡塔尔国来处理应用程序命名,并且没提供别的修正章程。第二,相当的小概存在远程存取-应用程序和Visual Studio 二零零七亟须共存,这样Visual Studio 2006技巧存取应用程序的布局文件。第三,基于浏览器的客户接口也不很融洽-你须求不断点击Back按键,并且顾客接口反映特别愚蠢。此外,非常多精品顾客恐怕想选取的特色不大概经由页面管理来完毕,那就退出了尾部提供者类所支撑的表征那后生可畏实际。这种办法还不能落到实处的地点有:

  由AspNetSqlProviderServiceWeb服务使用的Web.Config文件中的设置影响它处理的保有应用程序。特别地,如口令战略那样的设置适用于具备的应用程序。该服务应用默许提供者 (SQL SE福特ExplorerVE路虎极光卡塔尔国,因而朝气蓬勃旦缺省的总是字符串(在文书machine.config中维护卡塔尔国已经丰盛的话,就没有须要钦赐叁个提供者以至一个连接字符串。即便您需求一个不及的连天字符串,你必要包括二个connectionStrings标签(见所附源码中的列表5卡塔尔国。别的,为了利用Roles类,你一定要透过下列指令来运行基于剧中人物的安全。

  ·更新大大多顾客帐户细节

<roleManager enabled="true" />

  ·检索、改造、重新苏醒设置风姿洒脱客户的口令

  (二卡塔尔(英语:State of Qatar) 珍爱服务

  ·检索当前在线顾客数量新闻

  纵然其证据由AspNetSqlProviderServiceWeb服务来治本的应用程序可能是依照互连网或依照内部网的,可是服务本人是被设计由一个管理员通过地点内部网来存取的。你应该声明和授权到该服务的调用。此外,你还应当经过加密通信来提供隐衷服务。这是供给的,因为该服务要管理如客商名和口令等敏感新闻。保证机密的最轻松的艺术是行使HTTPS。 AspNetSqlProviderService在它的构造器南路过静态VerifySecureConnection(卡塔尔国助理方法来张开认证是或不是采纳了一个转败为胜连接。VerifySecureConnection(卡塔尔使用当前乞求的IsSecureConnection属性。为了支持开垦或该服务的此外品类的非坐褥性宣布,VerifySecureConnection(卡塔尔方法用Conditional属性加以修饰。仅有定义编写翻译符号HTTPS时该形式才会起效用。关于认证该服务的客商,既然Web服务是一本地内部网服务,那么使用Windows认证就不会有此外不当了。小编选用了应用集成的 Windows认证-那将节省了顾客必得明白地登入的难为。集成的证实的此外一个独特之处是,它用风度翩翩种专利格局来散列化发送过去的凭据。

  ·能够从一遍操作的三个剧中人物中删去全部顾客

  为了陈设集成的Windows认证,转到在IIS下的AspNetSqlProviderServiceWeb服务属性,选择目录安全选项卡,并且点击"Edit…"按键。不接受"Anonymous access"复选框何况有限支持选中"Integrated Windows authentication"复选框。AspNetSqlProviderService类被布署以必要表达(见列表4)-它使用 PrincipalPermission属性并把被验证的性质设计为true。

  ·检索关于口令管理计策(比如长度、重新载入参数战术、口令类型等)的新闻

[PrincipalPermission(SecurityAction.Demand,...,Authenticated=true)]

  ·测验客商凭证

  大器晚成旦调用者通过IIS被验证,该服务缺省级地区级将在IIS中以安排的身份如故运转。小编想以调用者身份运维该服务。为此,Web.Config文件(见列表5卡塔尔(قطر‎包蕴了一个identity标签-它把impersonate属性设置为true。

  ·验证顾客角色地位

<identity impersonate="true"/>

  而且,还可能有别的的特级顾客恐怕想要的脾气也得不到支撑。这一个特点饱含能够寻觅数据库全体应用程类别表,能够从一应用程序中删去全体的顾客,能够从一应用程序中删除全数的剧中人物,能够删除一应用程序(和它的全数相挂钩的客商和角色),能够删除全部的应用程序。简单的说,就算ASP.NET 2.0提供了贰个一等的周到的凭据处理,不过它仅提供了部分本来的田间管理采用,平时的其实拔尖客商是不会选取它的。

  然后,你供给使用SQL SERAV4VE奥迪Q3管理工科具来允许Web服务的调用者从aspnetdb数据库中张开读和写。

必发365电子游戏 3
图3.凭证微电脑应用程序的三个快速照相

  敬服该Web服务的另七个重大地方是授权。小编想要验证独有Windows超级客商组的分子能力存取这一劳务。为此,AspNetSqlProviderService类上的PrincipalPermission属性供给只有拔尖客户角色的成员才被允许利用该服务。

必发365电子游戏正文将向您来得如何用二个Web服务来包装ASP.NET,你能够定义况兼让该Web服务暴光逻辑接口。  这一切促使自身要好来支付一个定制的客商端凭证管理器应用程序来弥补那一个不足。图3来得该程序的叁个快照。前面包车型大巴风度翩翩部分将介绍自身是何等设计和塑造该证据微机的。

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

  你能够用别的此外组(该服务的实际上顾客应该是内部的风流浪漫员)来替换"Administrators"。

  PrincipalPermission属性使用配归于该线程的荆门管事人(principal)来证实调用者是或不是确实是点名角色中的生龙活虎员。在依靠于NT组(如拔尖顾客)时,那将威胁你使用一个WindowsPrincipal的实例。

public class WindowsPrincipal : IPrincipal{
 public WindowsPrincipal(WindowsIdentity ntIdentity);
 public virtual bool IsInRole(string role);
 //其它成员部分
}

  难题在于,为了利用Roles类,AspNetSqlProviderServiceWeb.Config文件必得运行基于角色的安全攻略。

<roleManager enabled="true" />

  那反过来使得ASP.NET 2.0把生机勃勃两样的principal依赖到HttpContext和线程上,当然还应该有RolePrincipal类。

public sealed class RolePrincipal : IPrincipal{...}

  在NT一流客户剧中人物中间试验图使用RolePrincipal和过火供给的地位将会退步,因为它将存取aspnetdb并非Windows组来搜求它。为补偿那一点,你必需手工业地沟通这一个官员同期在历次伏乞时把WindowsPrincipal的二个实例依靠到该线程上。为此,最轻便的办法是把多个Global.asax文件增添到该Web服务工程-通过点名在Global.cs文件中的Global类为类后的代码。

<%@ Application Language="C#" CodeBehind ="Global.cs" Inherits = "Global"%>

  这些Global类为应用程序授权央浼提供一个计算机。

public class Global : HttpApplication{
 protected void Application_AuthorizeRequest(object sender, EventArgs e){
  if(HttpContext.Current.User.Identity.IsAuthenticated){
   WindowsIdentity identity = HttpContext.Current.User.Identity as WindowsIdentity;
   Debug.Assert(identity != null);
   WindowsPrincipal principal;
   principal = new WindowsPrincipal(identity);
   Thread.CurrentPrincipal = principal;
  }
 } 
}

  假若调用者被评释,那么你要求实例化生机勃勃新的WindowsPrincipal对象而且把它依赖于当下线程。WindowsPrincipal布局器须求多少个WindowsIdentity的实例。万幸,因为该服务正在使用Windows集成的表达,在功成名就验证后,与最近HTTP上下文相关联的地点早就是WindowsIdentity类型了,由此你能够只获得那个实例。
**三、凭证微机应用程序

**  本文相应的源代码包罗了这么些证据微机应用程序-一个兼有足够的顾客接口的Windows表单应用程序,它使用在上一步描述的Web服务接口来为其余数据的应用程序管理安全凭证存款和储蓄。

  该应用程序导入七个Web接口定义,何况它独自据有地使用那么些接口。该应用程序有二个誉为AspNetSqlProviderService的Web服务代办类-它用来固定该服务。你须要从导入的接口手工地把它加多到该服务上。

必发365电子游戏 4
图4.Applications选项卡:那个选项卡让您选拔要陈设的应用程序。

partial class AspNetSqlProviderService :
SoapHttpClientProtocol,IMembershipManager,
IUserManager,IPasswordManager,
IApplicationManager,IRoleManager
{
 public AspNetSqlProviderService (){
  Credentials = CredentialCache.DefaultCredentials;
  Url = Settings.Default.AspNetSqlProviderService ;
 }
 //此外的实践
}

  为了援救集成的Windows认证,那个代理类的布局器使用CredentialCache的静态属性DefaultCredentials设置凭证属性-它只是简短地读取当前线程的安全标记。其它,这么些布局器还动用设计器生成的Settings类从应用程序配置类中读取Web服务地方。

必发365电子游戏 5
图5.Users选项卡:该选项卡列出在选定的应用程序中的全数顾客。

  那一个应用程序的应用一定直观,所以本身只介绍一下入眼显示屏和选取。Applications选项卡(见图4卡塔尔(قطر‎允许你选用要构造的应用程序。

  在那,选取一应用程序将影响全部其余的选项卡。你能够创立和删除一个应用程序或删除全部应用程序。Users选项卡列举出在采用的应用程序中的全体客商。

  你能够创制或删除生龙活虎顾客。假若您剔除大器晚成客商不过不选拔"All Data"复选框的话,它将去除该顾客然则保持它的角色身份新闻。你能够更新风姿浪漫顾客帐户或删除全部客商。依照从 AspNetSqlProviderServiceWeb服务再次回到的口令攻略的两样,你可以或不能改动或重新设置口令,何况能够或不得以须求应对该口令。在Users选项卡的开关和它所展现的对话框也对应地运营或禁绝。

  在Users选项卡的右臂是计算消息,如当前客商的在线数。Roles选项卡允许你把剧中人物加多到应用程序。

必发365电子游戏 6
图6:Roles选项卡:这么些选项卡令你把剧中人物增多到应用程序。

  当删除三个角色时,若是你筛选了"Fail if populated"复选框,那么只要它有其余成员来讲,就不会让你删掉该角色。左侧的列表视图突显在该应用程序中的全体顾客。你能够从四个剧中人物加多或删除生机勃勃客户,或从全部剧中人物中去除生龙活虎顾客。在底部,"Users in role"列表框彰显了在上边选定的剧中人物中的全部客商,而"Roles for User"列表框显示了在上头选定的顾客中的全部角色。

  Passwords选项卡显示在图7中,它列出已布局的口令战术何况同意你生成生机勃勃与钦赐的口令强度计谋相相称的新口令。

必发365电子游戏 7
图7.Passwords选项卡:你可以使用这一个选项卡生成一口令。

必发365电子游戏 8
图8.Credentials Service选项卡:使用这么些选项卡来筛选使用的Web服务。

  该选项卡让您接受要动用的Web服务。大器晚成旦运维,凭证微电脑应用程序即从应用程序配置文件中读取这几个地方。这些选项卡显示被筛选的Web服务。假使地方是低效的,也即是说,该服务不帮助具有需求的效能,那么在应用程序中的全数控件都将为空且是禁止的。你能够提供一个不黄金年代的地点,而下边包车型地铁Web浏览器控件将博览会示这一劳动。可是,假诺该服务支撑必要的Web方法(意气风发实用的Web服务卡塔尔国的话,你能够只接纳二个Web服务地点(通过点击Select开关卡塔尔。假如该服务是无用的,那么将禁绝Select开关。

  不幸的是,在.NET 2.0中绝非提供校验某服务是不是辅助后生可畏特地绑定或Web接口的停放援救,由此小编只可以手工业完成。所附源码中的列表6显得出 RefreshSelectButton(卡塔尔国和ContainsInterface(卡塔尔(قطر‎助理方法。RefreshSelectButton(卡塔尔首先禁止Select开关和相相配的菜单项。然后,验证钦点的地址是多少个.NET Web服务之处。然后,它存取展现在Web浏览器控件中的页面的内容还要证实它包括补助具备的接口的诀窍。为此,它要调用 ContainsInterface(卡塔尔方法并把页面包车型大巴开始和结果和要表明的接口类型提须要它。ContainsInterface(卡塔尔(英语:State of Qatar)验证该项目是三个接口的花色并且拿到一个MethodInfo对象数组-标识在该接口上的各样方法。然后,它定义二个收受单个实例MethodInfo的匿有名的模特式并且应用字符串类的Contains(卡塔尔国方法来表明该内容富含那么些形式。ContainsInterface(卡塔尔(قطر‎使用该数组类的静态TrueForAll<T>(卡塔尔(英语:State of Qatar)方法。

public delegate bool Predicate<T>(T obj);
public abstract class Array : ...
{
 public static bool TrueForAll<
 T>(T[] array,Predicate<
 T> match);
}

  ContainsInterface(卡塔尔提须要TrueForAll(卡塔尔(قطر‎一个MethodInfo对象数组和佚名方式情势的Predicate。唯有在该内容中找到全部的法辰时,TrueForAll<T>(卡塔尔(英语:State of Qatar)才重临true。

上一篇:没有了
下一篇:没有了