Tôi đang làm việc để nâng cấp ứng dụng .NET Core 2.2 MVC lên 3.0. Trong ứng dụng này, tôi đang xác thực bộ điều khiển bằng mã thông báo JWT. Mã thông báo chứa một số khiếu nại, nhưng khi tôi cố gắng truy cập chúng thông qua User.Claims
danh sách kết quả luôn trống.
Trong tôi Startup.cs
có thiết lập xác thực như vậy:
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"
};
});
}
}
Trong Core 2.2, tôi có thể truy cập các khiếu nại của mình bằng mã tương tự như sau:
[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 //
}
}
Tuy nhiên, khi tôi di chuyển cùng mã sang Core 3.0, tôi xác thực đúng, nhưng tôi không nhận được khiếu nại nào cho User
đối tượng.
Tôi đã bỏ lỡ một bước trong việc chuyển đổi này thành 3.0? Không User
được tự động điền thông tin nữa hay sao?
UseEndpoints
đến cuối Configure
phương thức và những thứ đã được sửa. Chúa ơi, tôi không thể tin được một thứ đơn giản như thế lại khiến tôi mất một khoảng thời gian đáng xấu hổ. Nếu bạn muốn đăng nó như là câu trả lời tôi sẽ chấp nhận nó.
User.Identity.IsAuthenticated
có vẻ sai. Nếu vậy, thì điều này có thể phải làm với Xác thựcScheme.