3 Stimmen

OData-Authentifizierung

Ich habe versucht, einen OData-Dienst zu implementieren, der auf einem Entity-Framework-Modell basiert, bei dem die Authentifizierung von Sql Azure bereitgestellt wird. Ich biete Zeilen-/Spaltenzugriff innerhalb der Datenbank.

Ich möchte in der Lage sein, dies von LinqPad, Excel usw. als einen sicheren Dienst aufzurufen.

Ich habe die verschiedenen Schemata ausprobiert, die in der Standardreihe aber obwohl 401 zurückgegeben wird, rufen weder Excel noch LinqPad mit dem eingegebenen Benutzernamen und Kennwort zurück.

Also dachte ich, ich würde den Benutzernamen/das Kennwort zu einem Abfrageparameter (über SSL) machen. Aber es stellt sich heraus, dass das auch illegal ist (OData erfordert eine gut geformte URL ohne Abfrageparameter).

Also dann dachte ich, warum nicht WebGet verwenden, um den Benutzernamen und das Kennwort in der URL einbetten, aber ich kann nicht bekommen, dass mit dem OData-Quellformat in WCF zu arbeiten:

<%@ 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
}
}

Hat jemand tatsächlich bekommen OData zu arbeiten, wo der Benutzername und das Kennwort in die Quelle übergeben werden?

1voto

eth0 Punkte 4809

Ich habe keinen Benutzernamen und kein Passwort verwendet, sondern mich mit einem API-Schlüssel authentifiziert, was technisch gesehen dasselbe ist. Siehe meine Antwort hier: WPF und WCF Data Services Authentifizierung auf Abfrageebene? - Ich verwende HTTP-Header zur Authentifizierung: Args.OperationContext.RequestHeaders["APIKey"]) aber Sie können dies ändern in Args.OperationContext.QueryString["APIKey"]) (nicht sicher, ob QueryString ist eine Eigenschaft, die mir gerade in den Sinn kommt), um die Eingabe von ?APIKey=blah in der URL.

0voto

Ich hatte eine ähnliches Problem mit OData für eine Silverlight-App mit C#, dass Sie eine neue Uri (Url) erstellen und die Anmeldeinformationen hinzufügen müssen, entweder hier oder Sie können einen Anmeldebildschirm erstellen, um sie einzugeben:

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

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X