2016-06-23 29 views
0

Ich habe ein Webapi-Backend, dass mehrere Client-Anwendungen verwenden. Die API ist mit jwt-Authentifizierung gesichert, sie basiert auf dem folgenden Beispiel: https://github.com/mrsheepuk/ASPNETSelfCreatedTokenAuthExample. Da ich mich mit all den Konzepten der tokenbasierten Authentifizierung noch nicht sehr wohl fühle, könnte ich einige Hinweise dazu verwenden. Mein Problem ist, dass ich meine Anwendungen brauche, um die gleiche API zu verwenden, aber den Zugriff für jede Anwendung auf einen bestimmten Bereich oder Controller zu beschränken.Asp.net 5 Web-API-Träger-Authentifizierung und mehrere Bereiche

Gemäß dem Beispiel kann ich Methoden in einem Bereich schützen mit:

[Authorize("Api")] 

Eine Richtlinie wird in Start hinzugefügt mit

authOptions.AddPolicy("Api", new AuthorizationPolicyBuilder() 
     .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme) // "Bearer" scheme 
     .RequireAuthenticatedUser().Build()); 

für gesicherte Anfragen vom Client I habe in der Regel einen Winkel 2 App, die einfach die JWT in den Headern wie folgt fügt:

headers.append('Authorization', 'Bearer ' + jwt); 

Ich weiß nicht alles die Mechanik hier, aber ich gehe davon aus, dass, wenn eine sichere Methode angefordert wird, die "Api" Attribut-Dekoration ist, was entscheidet/begrenzt, welche Richtlinie mit einer bestimmten Route in der API verwendet werden soll.

Was ist Best Practice und wie erweitere ich dies auf die Arbeit mit einzeln zugänglichen Abschnitten?

Antwort

0

Sie können ActionFilterAttribute für Authorization erstellen und für alle Aktionen verwenden.

Sie können die FrameworkAuthorise Filtermethoden gemäß Ihren Anforderungen implementieren.

enter image description here

Global.ApiKey ist der eindeutige Code für Ihre Anwendung Identität Sie den Zugriff auf diese Anwendung haben oder nicht.

 [FrameworkAuthorise(Global.ApiKey, AuthorisationType.None)] 
    public async Task<IHttpActionResult> Get()   
    { 
     // code goes here 
    } 

    [FrameworkAuthorise(Global.ApiKey, AuthorisationType.Bearer)] 
    public async Task<IHttpActionResult> Post()   
    { 
     // code goes here 
    } 

+0

Danke Venky, ich werde sehen, ob ich ein Gefühl dafür bekommen und es mit meinem Projekt zu arbeiten. – nplus