2010-11-15 87 views
3

我一直在嘗試基於Sql Azure提供身份驗證的實體框架模型實現OData服務。我在數據庫中提供行/列訪問。OData身份驗證

我希望能夠從LinqPad,Excel等稱爲安全服務。

我已經嘗試了standard series中定義的各種方案,但即使返回401,Excel或LinqPad都不會記錄用戶輸入的用戶名和密碼。

所以,我想我會讓用戶名/密碼成爲查詢參數(通過SSL)。但事實證明,這也是非法的(OData需要格式良好的URL,而且沒有查詢參數)。

於是我想,爲什麼不使用WebGet嵌入在URL中的用戶名和密碼,但我不能得到這與WCF中的OData源格式的工作:

<%@ ServiceHost的語言= 「C#」 廠= 「System.Data.Services.DataServiceHostFactory,System.Data.Services,版本= 4.0.0.0,文化=中性公鑰= b77a5c561934e089」 服務= 「WebApplication5.OData」 %>

public class OData : DataService<MyEntities> 
{ 
public static void InitializeService(DataServiceConfiguration config) 
    { 
     config.SetEntitySetAccessRule("*", EntitySetRights.AllRead); 
     config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2; 
    } 
protected override MyEntities CreateDataSource() 
{ 
    // create the OData source with the user name and password here 
} 
} 

有沒有人真的有OData工作的用戶名和密碼傳遞到源?

回答

1

我沒有使用用戶名和密碼說,但我已經通過技術上相同的API密鑰進行驗證。請參閱我的答案:WPF and WCF Data Services Authenticate at Query level? - 我使用HTTP標頭進行身份驗證:Args.OperationContext.RequestHeaders["APIKey"])但您可以將其更改爲Args.OperationContext.QueryString["APIKey"])(不確定是否QueryString是我頭頂的屬性),以允許在URL中傳遞?APIKey=blah

0

我曾與OData的一個similar problem爲Silverlight應用程序用C#中,你必須創建一個新的URI(URL),並添加憑據,不是在這裏,你可以創建一個登錄界面填充它們:

ServiceReference1.NAV nav = new ServiceReference1.NAV(new Uri(「http:...../OData/Company('company_name')/」));

nav.Credentials = new System.Net.NetworkCredential(「user」,「password」, 「domain」);