2015-07-01 13 views
5

Va bene così ho un servizio di autenticazione WebAPI che viene utilizzato per la richiesta/token e restituisce il token Bearer al client, ho aggiunto un AppId e una chiave Api alle proprietà in modo da Get BackUtilizzo di più schemi di autorizzazione (HMAC e 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" 
} 

L'AppId e Api chiave devono essere utilizzati dal client per generare una firma SHA256 HMAC per ogni richiesta.

Il mio controller ho usato l'attributo Autorizza e ha creato un attributo HmacAuthentication che implementano IAuthenticationFilter

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

Il problema che ho è che qualsiasi richiesta di questo controller si aspetterà la Authorization: Bearer ... intestazione e l'attributo HmacAuthentication aspetta anche l'intestazione Authorization: amx.

ora so che si può avere una sola intestazione di autorizzazione quindi il mio quandry è come posso implementare sia le intestazioni di autorizzazione senza rompere HTTP, qualcuno ha ottenuto l'uso di entrambi OWIN OAuth e autenticazione HMAC

ho seguito questi esempi da 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

che sto affrontando una situazione simile. Sto considerando di utilizzare solo un'intestazione personalizzata anziché provare a far funzionare due intestazioni di autorizzazione. Ti è venuto in mente qualcosa di meglio? – Glaucus

risposta

0

Questo è stato un po 'lungo, senza una risposta e da quando ho risolto il mio problema originale ho pensato che dovrei postare qui la soluzione in modo che altri possono fare uso di esso.

Alla fine, la soluzione era aggiungere un'intestazione personalizzata come @Glaucus suggerita nel loro commento. Per l'autorizzazione OAuth standard ho aggiunto l'attributo dell'intestazione Authorize. Per soddisfare il mio bisogno di HMAC ho semplicemente aggiunto un attributo X-Authorize all'intestazione e modificato il mio codice per utilizzare invece questa intestazione.

ora posso avere un servizio garantito da WebAPI OAuth token e mediante l'attuazione di autorizzazione HMAC sulle richieste

Problemi correlati