2010-11-15 60 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”);