Asp.net 如何验证请求头、JWT令牌
我有angular 7 Front项目和asp.net核心web API 从web API创建JWT web令牌后,我返回fronted,它将保存在本地存储中。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
在我想要向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)
{
//...
}