.NET Core 2.2 MVCアプリケーションを3.0にアップグレードする作業をしています。このアプリケーションでは、JWTトークンを使用してコントローラーを認証しています。トークンにはいくつかのクレームが含まれていますがUser.Claims
、結果のリストからそれらにアクセスしようとすると、常に空になります。
私にはStartup.cs
私はそうのような認証を設定しています。
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// Code removed for clarity //
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = JwtManager.Issuer,
ValidAudience = "MyAudience",
IssuerSigningKey = "MySigningKey"
};
});
}
}
Core 2.2では、次のようなコードを使用してクレームにアクセスできました。
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class MyController : Controller
{
[HttpGet("MyController/Action")]
public ActionResult<Aggregate[]> GetAction()
{
var username = User.FindFirstValue("MyUsernameClaim");
if (username == null)
{
return Forbid();
}
// Do Stuff //
}
}
ただし、同じコードをCore 3.0に移行すると、適切に認証されますが、User
オブジェクトに対する要求はありません。
これを3.0に変換するステップを逃しましたか?User
自動的にもうか何か情報が移入されませ?
ルーティングをどのように構成しましたか?UseEndoutsの前に、UseRouting、UseAuthentication、UseAuthorizationの順に追加しましたか?そのコードを見せていただけますか?
—
Ruard van Elburg
@RuardvanElburg私
—
Chris Stillwell、
UseEndpoints
はConfigure
メソッドの最後に移動し、それで問題が修正されました。聖なる牛、こんな単純なものは私に恥ずかしい時間を費やしてしまったとは信じられません。あなたが答えとしてそれを投稿したいなら、私はそれを受け入れます。
User.Identity.IsAuthenticated
間違っているようです。もしそうなら、これはAuthenticationSchemeと関係があるかもしれません。