Asp.net core mvc 如何为Asp.Net Core 2.2 MVC Web应用程序执行基于JWT令牌的身份验证?

Asp.net core mvc 如何为Asp.Net Core 2.2 MVC Web应用程序执行基于JWT令牌的身份验证?,asp.net-core-mvc,jwt,asp.net-core-webapi,Asp.net Core Mvc,Jwt,Asp.net Core Webapi,我有一个Asp.Net Core 2.2 MVC web应用程序,其中通过Asp.Net Core web Api 2.2处理数据库调用,此web Api将在验证登录凭据后生成JWT令牌,并使用JWT令牌返回MVC应用程序 在Asp.Net核心MVC应用程序控制器中,用Authorize属性修饰以验证来自浏览器的后续请求,但在这里我无法验证JWT令牌 因此,请建议如何在Asp.Net Core 2.2 MVC Web应用程序中验证JWT令牌 提前谢谢 代码: 看起来您正在使用用户凭证向web a

我有一个Asp.Net Core 2.2 MVC web应用程序,其中通过Asp.Net Core web Api 2.2处理数据库调用,此web Api将在验证登录凭据后生成JWT令牌,并使用JWT令牌返回MVC应用程序

在Asp.Net核心MVC应用程序控制器中,用Authorize属性修饰以验证来自浏览器的后续请求,但在这里我无法验证JWT令牌

因此,请建议如何在Asp.Net Core 2.2 MVC Web应用程序中验证JWT令牌

提前谢谢

代码:


看起来您正在使用用户凭证向web api发送请求,web api验证凭证并使用JWT令牌返回mvc客户端

在您的客户端应用程序中,在获取令牌并解码以获取索赔后,您可以创建新的索赔实体,添加索赔并登录用户。请参阅代码示例

如果您想知道如何解码JWT令牌,可以参考以下代码示例:


您似乎正在向web api发送带有用户凭据的请求,web api验证凭据并使用JWT令牌返回mvc客户端

在您的客户端应用程序中,在获取令牌并解码以获取索赔后,您可以创建新的索赔实体,添加索赔并登录用户。请参阅代码示例

如果您想知道如何解码JWT令牌,可以参考以下代码示例:


我回答了一个问题,我相信这就是你要找的,希望它能帮上忙,谢谢@Kevin提供的信息,但我之前已经尝试了所有这些步骤,但遇到了相同的问题您面临的问题/错误消息是什么?您能提供一个您的请求和授权的示例吗header@Nan我回答了一个问题,我相信这就是你想要的,希望它能帮上忙,谢谢@Kevin提供的信息,但我之前已经尝试了所有这些步骤,但遇到了相同的问题您面临的问题/错误消息是什么?您能提供一个您的请求和授权的示例吗header@Nan你得到了一个未经授权的401例外让我对我的问题说得更清楚些。用户将从MVC应用程序登录,然后Web API将验证用户名和密码,并将JWT令牌返回给MVC应用程序,而此MVC应用程序也不使用asp.net标识,因此我的计划类似于使用此JWT令牌并将其添加到标头或cookie中,以验证来自浏览器的任何其他请求以访问MVC应用程序资源。如果您需要任何其他信息,请告诉我。提前感谢。您的场景不清楚,您的mvc需要登录,因此请使用crdential向web api发送请求,使用token向web api发送回请求,现在您的mvc将解码token,获取声明并登录,因此[authorzie]将在mvc应用程序上工作,我的代码示例显示了这一点,这与asp.net标识无关。只需将用户存储在Cookie中,如果您想在MVC应用程序中实现JWT承载身份验证,您应该确认问题/受众/签名配置与令牌声明匹配。让我更清楚地说明我的问题。用户将从MVC应用程序登录,然后Web API将验证用户名和密码,并将JWT令牌返回给MVC应用程序,而此MVC应用程序也不使用asp.net标识,因此我的计划类似于使用此JWT令牌并将其添加到标头或cookie中,以验证来自浏览器的任何其他请求以访问MVC应用程序资源。如果您需要任何其他信息,请告诉我。提前感谢。您的场景不清楚,您的mvc需要登录,因此请使用crdential向web api发送请求,使用token向web api发送回请求,现在您的mvc将解码token,获取声明并登录,因此[authorzie]将在mvc应用程序上工作,我的代码示例显示了这一点,这与asp.net标识无关。只要将用户存储在Cookie中,如果您想在MVC应用程序中实现JWT承载身份验证,您应该确认问题/受众/签名配置与令牌声明匹配。
 services.AddAuthentication(j =>
{
    j.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    j.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
    j.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(x =>
{
    x.SaveToken = true;
    x.RequireHttpsMetadata = true;
    x.TokenValidationParameters = new TokenValidationParameters
    {
        ValidateIssuer = true,
        ValidateAudience = true,
        //ValidateLifetime = true,
        //ValidateIssuerSigningKey = true,
        ValidIssuer = "xyz.com",
        ValidAudience = "xyz.com",
        IssuerSigningKey = new SymmetricSecurityKey(key),
        ClockSkew = TimeSpan.FromMinutes(5)
    };
});


app.UseAuthentication();
app.UseMvc(routes =>
{
    routes.MapRoute(
    name: "default",
    template: "{controller=Login}/{action=Login}/{id?}");
});