Ich habe zwei Web-APIs; eine, die öffentlich ist und eine, die intern ist. Ich möchte, dass die Öffentlichkeit mit der internen kommuniziert. Allerdings würde ich zwei Sicherheitsebenen wie für die interne eins:Imitieren von Windows-Benutzer mit AntiForgery Tokens
- Windows-Authentifizierung (die getan wird)
- Fälschungstoken (das ist, was ich habe Probleme mit)
im Moment bin ich Erzeugen des AntiForgery
Token in der öffentlichen API:
string cookieToken, formToken;
AntiForgery.GetTokens(null, out cookieToken, out formToken);
return cookieToken + ":" + formToken;
ich dann diejenigen, die in einem Filter abziehen in der internen API:
var request = actionContext.Request;
if (!request.RequestUri.PathAndQuery.StartsWith("/api"))
{
return Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK));
}
string cookieToken = "";
string formToken = "";
IEnumerable<string> tokenHeaders;
if (request.Headers.TryGetValues("RequestVerificationToken", out tokenHeaders))
{
string[] tokens = tokenHeaders.First().Split(':');
if (tokens.Length == 2)
{
cookieToken = tokens[0].Trim();
formToken = tokens[1].Trim();
}
}
try
{
AntiForgery.Validate(cookieToken, formToken);
}
catch (HttpAntiForgeryException ex)
{
return Task.FromResult(new HttpResponseMessage(HttpStatusCode.Unauthorized));
}
return Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK));
Das funktioniert, irgendwie. Der Fehler, den ich bekomme ist:
Das mitgelieferte Anti-Fälschungs-Token war für Benutzer "" gedacht, aber der aktuelle Benutzer ist "WINDOWS8VM \ Michael".
Irgendwie muss ich die Windows-Benutzer verkörpern, wenn die Token zu erzeugen, so dass der Benutzer die gleichen sind. Ein weiteres Problem besteht darin, dass die CredentialCache.DefaultNetworkCredentials
leer sind. Dies ist fast sicher, da die Windows-Authentifizierung für die öffentliche API nicht aktiviert ist. Der Anwendungspool hat jedoch eine Identität und es wäre diese Identität, nach der ich suchen würde.
Wenn Sie eine API (intern) von einer anderen API (öffentlich) anrufen, warum sollten Sie überhaupt Anti-Fälschungs-Tokens wollen? – Evk
Der Hauptgrund besteht darin, sicherzustellen, dass andere interne Anwendungen diese API nicht nutzen können. Die Daten sind außergewöhnlich empfindlich. Wenn wir nur Windows-Authentifizierung haben, fühlen wir uns nicht genug.Es kann etwas sein, mit dem wir uns begnügen müssen, aber wir würden gerne einen Träger hinzufügen und wir wollten damit beginnen, 'AntiForgenerschein'-Token zu verwenden. Es gibt natürlich andere Wege, aber sie sind mehr involviert, was die Architektur betrifft. –
Sind Sie sicher, dass Sie wirklich verstehen, was Sie hier mit AF-Tokens erreichen möchten? Diese Token sollen CSRF-Angriffe verhindern und nicht die Anfragen zwischen den Diensten schützen. Die Art und Weise, wie Sie sie verwenden möchten, ist völlig gegen das, wofür sie bestimmt sind. Sie übergeben im Wesentlichen eine Menge verschlüsselter Daten von Dienst A an Dienst B und prüfen, ob B den Entschlüsselungsschlüssel kennt, aber dann wird kein AF benötigt, um solche Dinge zu tun. – Evk