gpt4 book ai didi

c# - User.Claims 在 MVC 应用程序中为空

转载 作者:太空狗 更新时间:2023-10-29 19:44:46 26 4
gpt4 key购买 nike

我正在努力将我的 .NET Core 2.2 MVC 应用程序升级到 3.0。在此应用程序中,我使用 JWT token 向 Controller 进行身份验证。该 token 包含多个声明,但当我尝试通过 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 对象的声明。 enter image description here

我是否错过了将其转换为 3.0 的步骤? User 是否不再自动填充信息或其他内容?

最佳答案

似乎用户根本没有通过身份验证。

在 asp.net core 3.0 中,路由已更改为端点路由。您可以通过设置 EnableEndpointRouting = false 来选择退出。

但这里似乎不是这样。这意味着您在使用它们时必须包含某些服务,例如身份验证和授权:

public void Configure(IApplicationBuilder app)
{
...

app.UseStaticFiles();

app.UseRouting();
app.UseCors();

app.UseAuthentication();
app.UseAuthorization();

app.UseEndpoints(endpoints => {
endpoints.MapControllers();
});

最重要的是,按此顺序。如此处所述:Migrate Startup.Configure .

关于c# - User.Claims 在 MVC 应用程序中为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58437800/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com