OData аутентификация - PullRequest
       40

OData аутентификация

3 голосов
/ 15 ноября 2010

Я пытался реализовать службу OData на основе модели структуры объекта, в которой аутентификация предоставляется Sql Azure.Я предоставляю доступ к строке / столбцу в базе данных.

Я хочу иметь возможность вызывать это из LinqPad, Excel и т. Д. В качестве безопасной службы.

Я пробовал различные схемы, определенные в стандартная серия , но, несмотря на возвращение 401, ни Excel, ни LinqPad не вспоминают с введенными мной именем пользователя и паролем.

Итак, я решил сделать имя пользователя / парольпараметр запроса (через SSL).Но оказывается, что это также незаконно (OData требует правильно сформированный URL без параметров запроса).

Итак, я подумал, почему бы не использовать WebGet для встраивания имени пользователя и пароля в URL, но я могу »чтобы это работало с исходным форматом OData в WCF:

<% @ ServiceHost Language = "C #" Factory = "System.Data.Services.DataServiceHostFactory, System.Data.Services, Version = 4.0.0.0, Culture = нейтральный, 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 работать, когда имя пользователя и пароль передаются в источник?

Ответы [ 2 ]

1 голос
/ 08 декабря 2011

Я не использовал имя пользователя и пароль, но я аутентифицировался с помощью API-ключа, который технически совпадает. См. Мой ответ здесь: Аутентификация служб данных WPF и WCF на уровне запросов? - я использую HTTP-заголовки для аутентификации: Args.OperationContext.RequestHeaders["APIKey"]), но вы можете изменить это на Args.OperationContext.QueryString["APIKey"]) (не уверен, если QueryString является свойство вершины моей головы), чтобы разрешить передачу ?APIKey=blah в URL.

0 голосов
/ 21 ноября 2014

У меня была похожая проблема с OData для приложения Silverlight с C # в том, что вам пришлось создать новый Uri (Url) и добавить учетные данные, либо здесь, либо вы можете создать экран входа взаполните их:

ServiceReference1.NAV nav = новый ServiceReference1.NAV (новый Uri ("http: ..... / OData / Company ('company_name') /"));

nav.Credentials = new System.Net.NetworkCredential ("пользователь", "пароль", "домен");

...