2011-09-29 54 views
0

我正在使用CustomMembershipProvider爲我的WCF服務驗證用戶。用戶訪問該服務後將獲得提示。如何使我的wcf服務可供特定用戶使用?

注:我想我可以得到用戶名和用戶名。但是如何將CustomMembershipProvider中的變量傳遞給我的wcf服務文件?

定義成員資格提供代碼

這裏是我驗證碼!

public override bool ValidateUser(string username, string password) 
    { 
     int authenticatedId = SecurityManager.Authenticate(username, password); 
     if (authenticatedId != -1) 
     { 
      return true; 
     } 

     return false; 
    } 

這是我的基本身份驗證主機廠

這會打電話給我的CustomMembershipProvider替換默認的Web服務工廠。

public class BasicAuthenticationHostFactory : ServiceHostFactory 
{ 
    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses) 
    { 
     var serviceHost = new WebServiceHost2(serviceType, true, baseAddresses); 
     serviceHost.Interceptors.Add(RequestInterceptorFactory.Create("DataWebService", new CustomMembershipProvider())); 
     return serviceHost; 
    } 
} 

任何幫助將不勝感激。

+2

爲什麼nhibernate標籤? – rbellamy

+0

那麼我使用NHibernate來訪問數據庫! – HardCode

+0

又是什麼問題? –

回答

0

一旦您執行了MembershipProvider.ValidateUser,應該創建一個有效的SecurityServiceContext並將其添加到傳入請求中。

internal ServiceSecurityContext Create(Credentials credentials) 
{ 
    var authorizationPolicies = new List<iauthorizationpolicy>(); 
    authorizationPolicies.Add(authorizationPolicyFactory.Create(credentials)); 
    return new ServiceSecurityContext(authorizationPolicies.AsReadOnly()); 
} 

那麼你應該有訪問用戶名通過ServiceSecurityContext.Current.PrimaryIdentity.Name

我認爲你從文章Basic Authentication on a WCF REST Service工作。作者似乎對問題的反應非常敏感 - 您可能想要爲他提供一些指導!祝你好運!

+0

謝謝你的迴應。你明白了我正在使用WCF REST服務套件!我在憑證上有一些錯誤。我在OperationContext中實現了這個代碼。 – HardCode