Active Directory 用户权限验证与服务访问控制

在企业环境中,对员工信息的访问通常需要严格控制,以确保只有授权的员工能够访问敏感信息。本文将介绍如何使用Active Directory(AD) 进行用户权限验证,并在服务中实现特定功能访问控制。

配置 Web.config 文件

首先,需要配置Web.config文件以启用Windows身份验证,并设置服务模型绑定。以下是配置文件的示例:

<system.web> <authentication mode="Windows"/> <compilation debug="true" targetFramework="4.0"/> <customErrors mode="RemoteOnly"/> <trust level="Full"/> <identity impersonate="false"/> </system.web> <system.serviceModel> <bindings> <basicHttpBinding> <binding name="BasicHttpEndpointBinding"> <security mode="TransportCredentialOnly"> <transport clientCredentialType="Windows"> <extendedProtectionPolicy policyEnforcement="Always"/> </transport> </security> </binding> </basicHttpBinding> </bindings> </system.serviceModel>

在这段配置中,启用了Windows身份验证,并且设置了绑定的安全模式为TransportCredentialOnly,这意味着服务将通过传输层进行身份验证。

实现服务函数

接下来,需要实现服务函数,这些函数将根据Active Directory中的用户组来控制访问权限。以下是服务实现的示例代码:

using System.ServiceModel; using System.DirectoryServices.AccountManagement; [OperationBehavior(Impersonation = ImpersonationOption.Allowed)] public MyFunction() { // 查找当前用户在Active Directory中的信息 string whoAmI = ServiceSecurityContext.Current.PrimaryIdentity.Name; // 设置域上下文 PrincipalContext context = new PrincipalContext(ContextType.Domain, Environment.UserDomainName); // 指定要查找的组名 GroupPrincipal group = GroupPrincipal.FindByIdentity(context, "APP_EMPLOYEEWS_BIO"); // 设置要查找的用户 UserPrincipal user = UserPrincipal.FindByIdentity(context, whoAmI); // 检查用户是否是组的成员,如果不是,则抛出异常 if (!user.IsMemberOf(group)) { throw new SecurityException("Access Denied: User has no permission to process the request"); } else { // 处理函数的代码 } }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485