【问题标题】:OData AuthenticationOData 身份验证
【发布时间】:2010-11-15 01:50:15
【问题描述】:

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

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

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

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

然后我想,为什么不使用 WebGet 在 URL 中嵌入用户名和密码,但我无法使用 WCF 中的 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 在用户名和密码被传递到源中的情况下工作?

【问题讨论】:

    标签: wcf authentication odata dataservice


    【解决方案1】:

    我没有单独使用用户名和密码,但我已通过技术上相同的 API 密钥进行身份验证。在此处查看我的答案:WPF and WCF Data Services Authenticate at Query level? - 我使用 HTTP 标头进行身份验证:Args.OperationContext.RequestHeaders["APIKey"]) 但您可以将其更改为Args.OperationContext.QueryString["APIKey"])(不确定QueryString 是否是我头顶的属性)以允许传入@网址中的 987654325@。

    【讨论】:

      【解决方案2】:

      我有一个带有 OData 的 similar problem 用于带有 C# 的 Silverlight 应用程序,因为您必须在此处创建一个新的 Uri (Url) 并添加凭据,或者您可以创建一个登录屏幕来填充它们:

      ServiceReference1.NAV 导航 = 新 ServiceReference1.NAV(新 uri("http:...../OData/Company('company_name')/"));

      nav.Credentials = new System.Net.NetworkCredential("user", "password", “域”);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-02
        • 2018-02-24
        • 2015-04-29
        相关资源
        最近更新 更多