ASP.NET Web-API Basic Authentication Authorisation-Header
Ich habe eine BasicAuthenticationAttribute
, die Prüfung der Zulassung-header in die Anfrage, aber obwohl es vorhanden ist, es glaubt immer noch, dass die Zulassung header null ist:
public class BasicAuthenticationAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (actionContext.Request.Headers.Authorization == null)
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
}
...
Wenn ich überprüfen actionContext.Request.Headers
ich sehen kann Authorization
aufgeführt:
{Connection: Keep-Alive
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-gb
Authorization: REDACTED_BUT_PRESENT==
Host: localhost:44300
Referer: https://localhost:44300/
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; .NET4.0E)
}
Update
Ich habe gerade überprüft den vollständigen request-Header und so sehen Sie aus... ich sehe einen Authorization-header in dem ersten Abschnitt, aber der Authorization-header in der zweiten Sektion ist eindeutig null.
Anfrage.Header
{Connection: Keep-Alive
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-gb
Authorization: REDACTED_BUT_PRESENT==
Host: localhost:1734
Referer: http://localhost:1734/
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; .NET4.0E)
}
base {System.Net.Http.Headers.HttpHeaders}: {Connection: Keep-Alive
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-gb
Authorization: VXNlcjpQYXNzd29yZA==
Host: localhost:1734
Referer: http://localhost:1734/
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; .NET4.0E)
}
Accept: {*/*}
AcceptCharset: {}
AcceptEncoding: {gzip, deflate}
AcceptLanguage: {en-gb}
Authorization: null
CacheControl: null
... removed for brevity ...
Warning: {}
- sind Sie versuchen, die Basic-Authentifizierung.
- ja - also ich werde die Genehmigung header und untersuchen es dann mit meinem Action Filter.
- Ich habe eine Message-handler, und es scheint gut zu funktionieren. Ich werde versuchen, mit der Aktion auch filter. Können Sie überprüfen, ob dies hilft gist.github.com/3872727 -Handler ,gist.github.com/3872715 - Unit-Test
- Dies ist im wesentlichen das gleiche für mich - ich kann sehen, dass der Authorization-header nur als gebucht, aber in der Message-Handler und denkt, dass
request.Headers.Authorization
null ist. Lassen Sie mich überprüfen Sie die Kopfzeilen generiert, der unit-tests und sehen, ob es anders aussieht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie stecken bleiben auf diese, können Sie den header mit:
Aber nicht über
Bemerkte ich selber, dass, wenn der Authorization-header enthalten nur die Schlüssel/token, die
request.Headers.Authorization
würde nicht eingeleitet werden, richtig, weil es die Suche nach einem Schema als auch in das format<Scheme> <key/token>
, d.h.Authorization: Token VXNlcjpQYXNzd29yZA==
, dann dieAuthorization
wäre nicht null mehr und enthaltenrequest.Headers.Authorization.Scheme = "Token"
undrequest.Headers.Authorization.Parameter = "VXNlcjpQYXNzd29yZA=="
Ich habe mein eigenes Beispiel für eine Basic-Authentifizierung Attribut. Vielleicht ein paar Tipps gibt.
Benutze ich:
Und hier ist der link zu der Komplettlösung:
http://remy.supertext.ch/2012/04/basic-http-authorization-for-web-api-in-mvc-4-beta/
Hinzufügen mehr information zum @finstas Antwort.
Genehmigung ist null, weil auch angegebenen HTTP-Header wie, Akzeptieren, Zulassung und viele weitere analysiert werden, die beim erstellen der HttpRequestHeaders Klasse. Daher, wenn die Anfrage mit einem format von dem unterscheidet, was .NET akzeptiert für sich, dass header, die spezifische Eigenschaft null.
Unten ist der dekompilierte code aus dem AuthenticationHeaderValue-Klasse verantwortlich für die Analyse der Authorization-header. Ebenso gibt es andere Klassen für die verschiedenen HTTP-Headern, die das gleiche tun.
Hoffe, das wirft mehr info, warum es muss ein Leerzeichen zwischen Token und dem Wert.