Das Schreiben eines sicheren WCF Data Service für Excel Power [geschlossen]
-
10-10-2019 - |
Frage
Ich habe einige Probleme, einen sicheren WCF-Datendienst Schreiben von Power verbraucht werden. Der Service funktioniert gut, und ich kann die Daten in Power ohne Probleme konsumieren.
Mein Problem ist, dass, wenn ich den Benutzer-ID und das Kennwort für den Datenfeed in Power (in Data Feed erweiterten Einstellungen) eingeben, kann ich keinen Zugriff auf sich aus dem Innern des WCF-Dienst zu bekommen scheint. Ich mag sowohl den Benutzer-ID und das Passwort zum Authentifizieren mit einer Datenbank verwenden, aber ich muß zuerst bei ihnen bekommen. :)
Gibt es gute Beispiele dafür, wie einen sicheren WCF Data Service speziell für Power zu schreiben?
Vielen Dank.
Lösung
ich mit dieser gleichen Sache zu kämpfen habe, und nach einigen Recherchen fand diese Blog-Post, die hat ich rollen:
http://pfelix.wordpress.com/2011/04/21/wcf-web-api-self-hosting-https-and-http-basic-authentication/
Kurz gesagt, gibt es einige Arbeit, die Sie tun müssen, um die Auftraggeber zu ermöglichen, den Service-Aufruf zu fließen.
Andere Tipps
Es gibt eine voll herunterladbare Probe auf MSDN
WCF Data Service mit Standardauthentifizierung für Power Kunden
https://code.msdn.microsoft.com / Büro / WCF-Datendienst-mit-547e9341
Update
Okay, jetzt habe ich den Code in der Schnittstelle verwendet wird (dass ich zu der Zeit erforschte ich geschrieben) Ich weiß, dass es funktioniert, also hier ist das Code-Beispiel:
Schritt 1:. Schreiben Sie einen HTTP-Handler alle Anfragen bearbeiten und die Authentifizierung (oder Ausgabe einer 401 challenge) durchführen
namespace WebHostBasicAuth.Modules
{
public class BasicAuthHttpModule : IHttpModule
{
private const string Realm = "My Realm";
public void Init(HttpApplication context)
{
// Register event handlers
context.AuthenticateRequest += OnApplicationAuthenticateRequest;
context.EndRequest += OnApplicationEndRequest;
}
private static void SetPrincipal(IPrincipal principal)
{
Thread.CurrentPrincipal = principal;
if (HttpContext.Current != null)
{
HttpContext.Current.User = principal;
}
}
// TODO: Here is where you would validate the username and password.
private static bool CheckPassword(string username, string password)
{
return username == "user" && password == "password";
}
private static void AuthenticateUser(string credentials)
{
try
{
var encoding = Encoding.GetEncoding("iso-8859-1");
credentials = encoding.GetString(Convert.FromBase64String(credentials));
int separator = credentials.IndexOf(':');
string name = credentials.Substring(0, separator);
string password = credentials.Substring(separator + 1);
if (CheckPassword(name, password))
{
var identity = new GenericIdentity(name);
SetPrincipal(new GenericPrincipal(identity, null));
}
else
{
// Invalid username or password.
HttpContext.Current.Response.StatusCode = 401;
}
}
catch (FormatException)
{
// Credentials were not formatted correctly.
HttpContext.Current.Response.StatusCode = 401;
}
}
private static void OnApplicationAuthenticateRequest(object sender, EventArgs e)
{
var request = HttpContext.Current.Request;
var authHeader = request.Headers["Authorization"];
if (authHeader != null)
{
var authHeaderVal = AuthenticationHeaderValue.Parse(authHeader);
// RFC 2617 sec 1.2, "scheme" name is case-insensitive
if (authHeaderVal.Scheme.Equals("basic",
StringComparison.OrdinalIgnoreCase) &&
authHeaderVal.Parameter != null)
{
AuthenticateUser(authHeaderVal.Parameter);
}
}
}
// If the request was unauthorized, add the WWW-Authenticate header
// to the response.
private static void OnApplicationEndRequest(object sender, EventArgs e)
{
var response = HttpContext.Current.Response;
if (response.StatusCode == 401)
{
response.Headers.Add("WWW-Authenticate",
string.Format("Basic realm=\"{0}\"", Realm));
}
}
public void Dispose()
{
}
}
}
Schritt 2:. Konfigurieren Sie Ihren neuen Handler mit IIS über web.config
<system.webServer>
<modules>
<add name="BasicAuthHttpModule"
type="WebHostBasicAuth.Modules.BasicAuthHttpModule, YourAssemblyName"/>
</modules>
...
Wichtig für Excel Power
Sehen Sie diesen Fehler: Power Authorization-Header in Standardauthentifizierung OData Svc nicht