問題: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);
}
}
郵便番号の使用私はAuthサービスを呼び出してaccess_tokenを取得してから、そのトークンを使用してRoutesController Getメソッドを呼び出しています。
Windows(VS2015の下でサービスを起動する、またはCMD経由でサービスを起動する)では、ルートを持つ通常のJSONが返されます。私は、エラー、次のLinux上でソリューションを展開してきました
が登場:
NullReferenceException: Object reference not set to an instance of an object.
そしてラインに私のIdentityUserHandlerクラスメソッドHandleRequirementAsyncにrefferingされます。Linux的環境をデバッグする
user.IMEI = context.User.Claims.SingleOrDefault(x => x.Type == "imei")?.Value;
限り私がマネージャー問題があるようです:
AuthorizationHandlerContext context
パラメータメソッド内のHandleRequirementAsync
コレクションcontex.User.Claimsには要素がありません。 Windowsでは、Linuxにはありません。
誰でも知っていますか?
どこにも同じ問題はありません。 Ubuntu 16.04 – eugeneK