Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何验证请求头、JWT令牌_Asp.net_Angular_Asp.net Web Api_Asp.net Core_Jwt - Fatal编程技术网

Asp.net 如何验证请求头、JWT令牌

Asp.net 如何验证请求头、JWT令牌,asp.net,angular,asp.net-web-api,asp.net-core,jwt,Asp.net,Angular,Asp.net Web Api,Asp.net Core,Jwt,我有angular 7 Front项目和asp.net核心web API 从web API创建JWT web令牌后,我返回fronted,它将保存在本地存储中。 在我想要向web API发送请求之后,我将把JWT web令牌放在请求头部分 那很好。所以我想使用JWT负载数据对请求进行身份验证。我的JWT有效负载数据有记录用户名、用户角色的一些信息 我想在通过http get请求获取产品详细信息时检查它的有效令牌。你能帮我在asp.net核心web api中进行身份验证吗 asp.net核心web

我有angular 7 Front项目和asp.net核心web API

从web API创建JWT web令牌后,我返回fronted,它将保存在本地存储中。
在我想要向web API发送请求之后,我将把JWT web令牌放在请求头部分

那很好。所以我想使用JWT负载数据对请求进行身份验证。我的JWT有效负载数据有记录用户名、用户角色的一些信息

我想在通过http get请求获取产品详细信息时检查它的有效令牌。你能帮我在asp.net核心web api中进行身份验证吗

asp.net核心web api,Angular 7 cli

Startup.cs-WEB API 构建Web令牌-Web API 将令牌放入标题部分-前端 控制器-WEB API
[路线(“获取产品”)]
[HttpGet]
公共列表GetProduct(int productId)
{
var repo=new MEData.Repository.ProductRepo();
var productData=repo.GetProduct(productId);
返回产品数据;
}

确保您拥有
app.UseAuthentication()在app.UseMvc()之前添加的代码在启动类的配置方法中

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {

            app.UseAuthentication();

            app.UseMvc();
        }

然后根据您的要求在操作或控制器级别添加
[Authorize]
属性

确保您拥有
app.UseAuthentication()在app.UseMvc()之前添加的代码在启动类的配置方法中

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {

            app.UseAuthentication();

            app.UseMvc();
        }

然后还可以根据您的要求在操作或控制器级别添加
[Authorize]
属性

除了
app.UseAuthentication()
调用之外,还可以尝试以下选项:

1.
[Authorize]
属性应用于
身份验证方案

[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
[Route("GetProduct")]
[HttpGet]
public List<ProductModel> GetProduct(int productId)
{
   //...
}
2.尝试使用
服务。添加授权
策略和所选方案

services.AddAuthorization(options =>
{
    options.AddPolicy("Jwt", policy =>
    {
        policy.AuthenticationSchemes.Add(JwtBearerDefaults.AuthenticationScheme);
        policy.RequireAuthenticatedUser();
    });
});
然后使用
[Authorize]
属性使用策略

[Authorize(Policy = "Jwt")]
[Route("GetProduct")]
[HttpGet]
public List<ProductModel> GetProduct(int productId)
{
   //...
}
[授权(Policy=“Jwt”)]
[路线(“获取产品”)]
[HttpGet]
公共列表GetProduct(int productId)
{
//...
}

一般来说,我认为需要
services.AddAuthorization
行。查看哪些选项适合您。

除了
app.UseAuthentication()
call之外,还可以尝试以下选项:

1.
[Authorize]
属性应用于
身份验证方案

[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
[Route("GetProduct")]
[HttpGet]
public List<ProductModel> GetProduct(int productId)
{
   //...
}
2.尝试使用
服务。添加授权
策略和所选方案

services.AddAuthorization(options =>
{
    options.AddPolicy("Jwt", policy =>
    {
        policy.AuthenticationSchemes.Add(JwtBearerDefaults.AuthenticationScheme);
        policy.RequireAuthenticatedUser();
    });
});
然后使用
[Authorize]
属性使用策略

[Authorize(Policy = "Jwt")]
[Route("GetProduct")]
[HttpGet]
public List<ProductModel> GetProduct(int productId)
{
   //...
}
[授权(Policy=“Jwt”)]
[路线(“获取产品”)]
[HttpGet]
公共列表GetProduct(int productId)
{
//...
}


一般来说,我认为需要
services.AddAuthorization
行。查看哪些选项适合您。

您似乎已经设置好了,您所需要的只是控制器或操作方法上的Authorize属性(据我所知),我已经尝试过了。但随后它将所有请求显示为401(未经授权)请求。理想情况下,这是您想要的行为,以保护您的api。但是,如果您只有某些需要授权的操作,那么只使用authorize属性标记这些操作。您有哪些日志?我不知道您的想法,朋友。“日志”是什么意思?您似乎已经设置好了,您所需要的只是控制器或操作方法上的Authorize属性。据我所知,我已经尝试过了。但随后它将所有请求显示为401(未经授权)请求。理想情况下,这是您想要的行为,以保护您的api。但是,如果您只有某些需要授权的操作,那么只使用authorize属性标记这些操作。您有哪些日志?我不知道您的想法,朋友。“日志”是什么意思?那么唯一的原因可能是jwt令牌无效。您是否尝试过使用解码令牌?web api是否在未应用授权的情况下返回数据?对于测试,请尝试在Startup.cs中设置
validateisuer=false,validateudience=false,
。那么唯一的原因可能是jwt令牌无效。您是否尝试过使用?web api是否可以在未应用授权的情况下返回数据?对于测试,请尝试在Startup.cs中设置
validateisuer=false,validateudience=false,
[Authorize(Policy = "Jwt")]
[Route("GetProduct")]
[HttpGet]
public List<ProductModel> GetProduct(int productId)
{
   //...
}