2017-11-03 4 views
1

Problem:Identity Server 4 - Benutzeransprüche leer unter Linux

Auf Linux-Server Benutzeransprüche werden nicht von Auth zu API übergeben. funktioniert alles einwandfrei (unter VS2017 und mit CMD)

I-Controller haben mit Sondergenehmigung Attribut auf Windows-Rechner:

[Authorize(Policy = "identity")] 
[Route("routes")] 
public class RoutesController : Controller 
{ 
    [HttpGet] 
    public IActionResult Get(string postId, string routeType) 
    { 
     // 
    } 

In Startup.cs I richtigen Einträge zur Verfügung gestellt haben:

services.AddMvc(options => { 
    options.Filters.Add(new AuthorizeFilter("identity")); 
}); 
services.AddAuthorization(options => { 
    options.AddPolicy("identity", policy => 
    { 
     policy.Requirements.Add(new IdentityUserRequirement()); 
    }); 
}); 
services.AddSingleton<IAuthorizationHandler, IdentityUserHandler>(); 

Und erstellte richtige Klasse in/Filter-Verzeichnis:

public class IdentityUserHandler : AuthorizationHandler<IdentityUserRequirement> 
{ 
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, IdentityUserRequirement requirement) 
    { 
     UserModel user = _userRepository.FindById(context.User.Claims.SingleOrDefault(x => x.Type == "userid")?.Value); 
     user.IMEI = context.User.Claims.SingleOrDefault(x => x.Type == "imei")?.Value; 
     _userRepository.UpdateUser(user); 

     context.Succeed(requirement); 
     return Task.FromResult(0); 
    } 
} 

Verwenden von Postman Ich rufe den Auth-Dienst an, um access_token zu erhalten, und dann benutze ich diesen Token, um meine RoutesController-Get-Methode aufzurufen.

Unter Windows (Starten von Diensten unter VS2015 oder Starten von Diensten über CMD) gibt die Methode normales JSON mit Routen zurück.

Als ich Lösung auf Linux folgende Fehler bereitgestellt haben schien:

NullReferenceException: Object reference not set to an instance of an object. 

Und ist reffering meiner IdentityUserHandler Klassenmethode HandleRequirementAsync Linie:

user.IMEI = context.User.Claims.SingleOrDefault(x => x.Type == "imei")?.Value; 

Was i-Manager Linux-Umgebung zu debuggen sieht so aus als gäbe es ein problem mit:

AuthorizationHandlerContext context 

parameter r in Methode HandleRequirementAsync

Sammlung contex.User.Claims hat keine Elemente. Unter Windows hat unter Linux keine.

Jeder weiß warum?

+0

Haben Sie das gleiche Problem aus dem Nichts. Ubuntu 16.04 – eugeneK

Antwort

0

Ich habe einige Tests gemacht und es sieht aus wie das ist nur auf meinem Entwickler Maschine arbeiten, auf:

  • Centos
  • Win Server 2k8
  • Win Sever 2k16

Problem existiert