문제점 :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.
아무도 알아?
아무 문제가없는 동일한 문제가 있습니다. 우분투 16.04 – eugeneK