【发布时间】:2009-08-21 12:29:54
【问题描述】:
我正在尝试使用自定义 ASP.NET MembershipProvider 和 RoleProvider 来处理我的服务的安全性。该服务自托管在控制台应用程序中,而不是在 IIS 中。 我使用带有基本身份验证的 webHttpBinding。我将 serviceCredentials 和 serviceAuthorization 配置为使用提供程序。提供者真的被初始化了。但是 WCF 似乎忽略了我的设置并尝试将用户登录到 Windows。我从事件日志中发现了这一点,并通过将我的 Windows 凭据发送到服务来证明这一点。下面你可以看到我的配置和调试截图。为什么使用 windows 进行身份验证?也许没有 IIS 就无法使用 ASP.NET 身份验证提供程序?
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<roleManager
enabled="true"
defaultProvider="CustomRoleProvider">
<providers>
<clear/>
<add
name="CustomRoleProvider"
type="CustomRoles.CustomRoleProvider, CustomRoles"/>
</providers>
</roleManager>
<membership defaultProvider="CustomMembershipProvider" userIsOnlineTimeWindow="15">
<providers>
<clear/>
<add name="CustomMembershipProvider"
type="CustomRoles.CustomMembershipProvider, CustomRoles"/>
</providers>
</membership>
</system.web>
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding name="webHttp">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Basic" />
</security>
</binding>
</webHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="Service">
<serviceAuthorization principalPermissionMode="UseAspNetRoles"
roleProviderName="CustomRoleProvider" />
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
membershipProviderName="CustomMembershipProvider" />
</serviceCredentials>
<serviceSecurityAudit auditLogLocation="Application" serviceAuthorizationAuditLevel="SuccessOrFailure"
messageAuthenticationAuditLevel="SuccessOrFailure" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="Service" name="CustomRoles.Service">
<endpoint address="http://127.0.0.1:8060" binding="webHttpBinding"
bindingConfiguration="webHttp" contract="CustomRoles.IService" />
</service>
</services>
</system.serviceModel>
</configuration>
这就是我在调试时看到的。为什么要使用 windows 进行身份验证?
credentials screen http://img81.imageshack.us/img81/1289/credentials.gif
【问题讨论】:
-
使用应用程序发现角色提供者正在工作,但成员资格提供者没有。目前,我正在检查它是否由于 asp.net 和自托管服务实例的初始化方式不同而被忽略。但这似乎真的很奇怪。现在我将尝试总结问题。用户名验证有 3 个选项 - windows、membershipprovider 和 custom。自定义工作,windows 工作,但成员选项被忽略,wcf 使用 windows 代替它。为什么?
标签: wcf authentication asp.net-membership roleprovider webhttpbinding