2016-06-08 10 views
11

Der Versuch, Bearer-Token-basierte Authentifizierung in einem einfachen .NET Core Web API-Projekt zu verwenden. Hier ist meine Startup.csBearer Token-Authentifizierung in ASP.NET Core

app.UseMvc(); 
//--- 
const string secretKey = "mysupersecret_secretkey!123"; 
SymmetricSecurityKey signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey)); 
SigningCredentials signingCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256); 
//--- 
const string audience = "Audience"; 
const string issuer = "Issuer"; 
//--- 
TokenValidationParameters tokenValidationParameters = new TokenValidationParameters 
{ 
    ValidateIssuerSigningKey = true, 
    IssuerSigningKey = signingKey, 

    ValidateIssuer = false, 
    ValidIssuer = issuer, 

    ValidateAudience = true, 
    ValidAudience = audience, 

    ValidateLifetime = true, 

    ClockSkew = TimeSpan.Zero, 
    AuthenticationType = JwtBearerDefaults.AuthenticationScheme 
}; 
//--- 
app.UseJwtBearerAuthentication(new JwtBearerOptions 
{ 
    AutomaticAuthenticate = true, 
    AutomaticChallenge = true, 
    TokenValidationParameters = tokenValidationParameters, 
    AuthenticationScheme = JwtBearerDefaults.AuthenticationScheme, 
}); 

Auch i Aktion AuthorizeAttribute an Steuerungen

hinzufügen
[HttpGet] 
[Authorize(ActiveAuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)] 
public IEnumerable<string> Get() 
{ 
    return new[] { "value1", "value2" }; 
} 

Aber wenn ich versuche, mit Kopf get Anfrage zu senden Authorization: Bearer [TOKEN] i bekommen Ausnahme

System.InvalidOperationException: No authentication handler is configured to authenticate for the scheme: Bearer 
    at Microsoft.AspNetCore.Http.Authentication.Internal.DefaultAuthenticationManager. 

Also, was ist dieser "Authentifizierungshandler"? Wo muss ich diesen Handler setzen?

+0

Können Sie bitte Ihre gesamte 'configure' Methode teilen? – Pinpoint

+0

Shure, http://pastebin.com/TgRkHNZk app.UseSimpleTokenProvider - ist eine einfache Token Endpoint Registrierung, fand ich es hier: https://github.com/nbarbettini/SimpleTokenProvider – Maxim

Antwort

24

In ASP.NET Core spielt die Reihenfolge der Middleware eine Rolle: Sie werden in derselben Reihenfolge ausgeführt, in der sie registriert sind. Hier wird app.UseMvc() vor der JWT Bearer Middleware aufgerufen, damit dies nicht funktionieren kann.

Put app.UseMvc() am Ende der Pipeline und es sollte funktionieren:

app.UseJwtBearerAuthentication(new JwtBearerOptions 
{ 
    AutomaticAuthenticate = true, 
    AutomaticChallenge = true, 
    TokenValidationParameters = tokenValidationParameters, 
    AuthenticationScheme = JwtBearerDefaults.AuthenticationScheme, 
}); 

app.UseMvc(); 
+1

Thank you so much! – Maxim