2015-07-01 6 views
5

Okay, ich habe einen WebAPI-Auth-Dienst, der für die/Token-Anfrage verwendet wird und das Bearer-Token an den Client zurückgibt, ich habe den Eigenschaften einen AppId- und Api-Schlüssel hinzugefügt Holen Sie sich zurückVerwenden mehrerer Autorisierungsschemata (HMAC und OATH)

{ 
"access_token": "...", 
"token_type": "bearer", 
"expires_in": 86399, 
"dm:appid": "1", 
"dm:apikey": "...", 
".issued": "Wed, 01 Jul 2015 20:46:45 GMT", 
".expires": "Thu, 02 Jul 2015 20:46:45 GMT" 
} 

die AppId und Api Key sollte vom Client verwendet werden, um eine HMAC SHA256 Signatur für jede Anforderung zu generieren.

Auf meinem Controller habe ich das Autorisieren Attribut verwendet und erstellt ein HmacAuthentication Attribut, die IAuthenticationFilter implementieren

[RoutePrefix("api/account")] 
[Authorize] 
[HmacAuthentication] 
public class AccountController : ApiController 
{ 
    // rest of controller here 
} 

Das Problem ich habe, ist, dass jeder Antrag auf diesen Controller wird erwarten, dass die Authorization: Bearer ... Header und das HmacAuthentication Attribut erwarten auch die Authorization: amx Kopfzeile.

Jetzt weiß ich, dass man nur so ein Authorization-Header haben kann meine quandry ist, wie kann ich ohne brechen HTTP beide Authorization Header implementieren, hat jemand die Verwendung sowohl OWIN OAuth und HMAC-Authentifizierung erreicht

ich diese Beispiele gefolgt von Taiseer Joudeh

Token Based Authentication using ASP.NET Web API 2, Owin, and Identity Secure ASP.NET Web API using API Key Authentication – HMAC Authentication

+0

Ich bin vor einer ähnlichen Situation gesichert haben. Ich erwäge, nur einen benutzerdefinierten Header zu verwenden, anstatt zu versuchen, zwei Autorisierungsheader zu arbeiten. Hast du etwas besseres gefunden? – Glaucus

Antwort

0

Dies hat ein lange Weile ohne Antwort und da ich mein ursprüngliches Problem behoben habe ich dachte, ich hier die Lösung veröffentlichen sollte, damit anderen Gebrauch machen kann davon.

Am Ende war die Lösung, einen benutzerdefinierten Header wie @Glaucus in ihrem Kommentar vorgeschlagen hinzuzufügen. Für die OAuth-Standardautorisierung habe ich das Header-Attribut Authorize hinzugefügt. Um meinen Bedarf für den HMAC zu erfüllen, fügte ich einfach einen X-Authorize-Attribut zum Header hinzu und änderte meinen Code, um stattdessen diesen Header zu verwenden.

Jetzt kann ich einen WebAPI Dienst von OAuth-Token und durch die Umsetzung HMAC Genehmigung über die Anträge