3

我一直在尝试基于由 Sql Azure 提供身份验证的实体框架模型来实现 OData 服务。我在数据库中提供行/列访问。

我希望能够从 LinqPad、Excel 等中调用它作为安全服务。

我已经尝试了标准系列中定义的各种方案,但即使返回 401,Excel 或 LinqPad 都不会调用我输入的用户名和密码。

所以,我想我会让用户名/密码成为查询参数(通过 SSL)。但事实证明这也是非法的(OData 需要格式正确且没有查询参数的 URL)。

于是我想,为什么不使用 WebGet 在 URL 中嵌入用户名和密码,但我不能让它与 WCF 中的 OData 源格式一起使用:

<%@ ServiceHost Language="C#" Factory="System.Data.Services.DataServiceHostFactory, System.Data.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Service="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 在用户名和密码被传递到源中的地方工作?

4

2 回答 2

1

我没有使用用户名和密码,但我已经通过技术上相同的 API 密钥进行了身份验证。在此处查看我的答案:WPF 和 WCF 数据服务在查询级别进行身份验证?- 我使用 HTTP 标头进行身份验证:Args.OperationContext.RequestHeaders["APIKey"])但您可以将其更改为Args.OperationContext.QueryString["APIKey"])(不确定是否QueryString是我头脑中的一个属性)以允许传入?APIKey=blahURL。

于 2011-12-08T09:38:35.940 回答
0

我在使用 C# 的 Silverlight 应用程序的 OData 中遇到了类似的问题,因为您必须创建一个新的 Uri (Url) 并在此处添加凭据,或者您可以创建一个登录屏幕来填充它们:

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

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

于 2014-11-21T10:40:09.890 回答