我有一個啓用了角色的SqlMembershipProvider商店。這已配置,並且角色「xxUser」和「xxAdmin」中具有用戶「devtest」。ASP.NET會員供應商身份驗證無法驗證WCF服務
我也有一個WCF服務,我想進行身份驗證和授權。我的問題是:
- 授權並不 發生,儘管該策略屬性代碼只是執行
- 我沒有得到任何身份或安全 上下文,以便不知道誰是 調用服務
我需要:
- 知道哪些用戶被呼叫 方法
- 一定程度上拒絕 用戶如果權限不匹配 (理想情況下這應該是執行中的 RoleProvider /的MembershipProvider/WCF ,但可以做我自己,如果我要)
- 在SSL運輸
我有我的服務合同成立這樣的:
[ServiceContract]
public interface ISupportService
{
[OperationContract]
[PrincipalPermission(SecurityAction.Demand, Role = "ThisRoleDoesNotExist")]
List<BaseInterestRate> GetAllBaseInterestRates();
}
的代碼是簡單的電子nough:
public class SupportService : ISupportService
{
public List<BaseInterestRate> GetAllBaseInterestRates()
{
OperationContext operationContext = OperationContext.Current;
ServiceSecurityContext serviceSecurityContext = ServiceSecurityContext.Current; // is always null
using (xxxEntities entities = new xxxEntities())
{
return new List<BaseInterestRate>(entities.BaseInterestRates);
}
}}
我的服務配置是這樣的:
- >
<behaviors>
<serviceBehaviors>
<behavior name="SupportServiceBehavior">
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
<serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="AspNetSqlRoleProvider" />
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
membershipProviderName="SqlMembershipProvider" />
</serviceCredentials>
</behavior>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
在已經配置的MembershipProvider:
<membership defaultProvider="SqlMembershipProvider" >
<providers>
<clear/>
<add name="SqlMembershipProvider"
connectionStringName="SqlMembershipProvider"
applicationName="xxx"
type="System.Web.Security.SqlMembershipProvider" />
</providers>
</membership>
<roleManager enabled="true">
<providers>
<clear />
<add connectionStringName="SqlMembershipProvider" applicationName="xxx"
name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" />
<add applicationName="xxx" name="AspNetWindowsTokenRoleProvider"
type="System.Web.Security.WindowsTokenRoleProvider" />
</providers>
</roleManager>
我按照這些網頁,以信中的說明:
- How to: Use the SQL Server Role Provider with Windows Authentication in WCF Calling from Windows Forms (MSDN)
- How to: Create and Install Temporary Client Certificates in WCF During Development (MSDN)
- How to: Use wsHttpBinding with Username Authentication and TransportWithMessageCredentials in WCF Calling from Windows Forms (MSDN)
- 也相當有用通過SO發現:Use Asp.Net Membership provider with a WCF .svc service (Alkampfer's Place)
我將在免得期望與證書/運輸/等等的問題。以異常失敗,但我可以在WCF調用中進行調試。我沒有可用的安全上下文/用戶上下文,當我使用的用戶不是上述兩個角色(我在上面的代碼示例中使用)時,我不會被「踢出」。
我的客戶端應用程序目前是一個Web應用程序,但最終還會提供Windows窗體應用程序和測試套件。我目前正在使用ASP.NET WebDev服務器並運行.NET 4.0。
我錯過了什麼嗎?
什麼是ISupportService執行的屬性? – Aliostad 2010-10-27 11:43:09
實現類沒有任何屬性。我更新了該帖子以反映。 – 2010-10-27 12:31:20