2017-11-03 1 views
1

문제점 :Identity Server 4 - Linux에서 사용자 클레임이 비어 있음

Linux 서버에서 사용자 클레임은 인증에서 API로 전달되지 않습니다. Startup.cs에서 나는 적절한 항목을 제공 한

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

:

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>(); 

및 Windows 시스템에서 모든 것을 내가 특별 권한 부여 특성과 컨트롤러를

(VS2017 및 사용 CMD에서) 잘 작동/Filters 디렉토리에 적절한 클래스를 만들었습니다.

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); 
    } 
} 

우편 사용 access_token을 얻기 위해 Auth 서비스를 호출하고, 그 토큰을 사용하여 RoutesController Get 메서드를 호출합니다.

Windows (VS2015에서 서비스 시작 또는 CMD를 통해 서비스 시작)에서는 경로가있는 일반 JSON을 반환합니다. 나는 리눅스 다음과 같은 오류에 솔루션을 구축 한

등장 :

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

라인 내 IdentityUserHandler 클래스 메서드 HandleRequirementAsync에 참고로하는 것에있다 :

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

를 지금까지 내가 관리자가 리눅스 환경을 디버깅 문제가있는 것 같습니다 :

AuthorizationHandlerContext context 

매개 변수 메서드에서 HandleRequirementAsync

컬렉션 contex.User.Claims에는 요소가 없습니다. Windows에서는 Linux no.

아무도 알아?

+0

아무 문제가없는 동일한 문제가 있습니다. 우분투 16.04 – eugeneK

답변

0

나는 몇 가지 테스트를했습니다 내 개발자 머신에서만 작동하고 이런 식으로는에 보이는 :

  • 를 CentOS
  • 승리 서버 2K8
  • 승리 끊다의 2k16

문제가 있습니다

관련 문제