如何使用 Postman 测试 jwt 身份验证

Posted

技术标签:

【中文标题】如何使用 Postman 测试 jwt 身份验证【英文标题】:how to test jwt authentication using Postman 【发布时间】:2021-06-19 06:57:43 【问题描述】:

我有一个 API,我为身份验证实现了 jwt,这是我的身份验证:

         [Route("api/[controller]")]
            [ApiController]
            public class AuthController : ControllerBase
            

                [HttpPost, Route("login")]
                public IActionResult Login([FromBody]LoginModel user)
                
                   if (user == null)
                    
                        return BadRequest("Invalid client request");
                    


                    if (user.UserName == "test" && user.Password == "1234")
                    

                        var secretKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("sretKey@345"));
                        var signinCredentials = new SigningCredentials(secretKey, SecurityAlgorithms.HmacSha256);

                        var tokeOptions = new JwtSecurityToken(

                            issuer: "https://localhost:44361",
                            audience: "https://localhost:44378",
                            claims: new List<Claim>(),
                            expires: DateTime.Now.AddMinutes(25),
                            signingCredentials: signinCredentials
                        );

在邮递员这里是错误

在我的控制器中,我添加了授权属性,我在没有授权属性的情况下测试了我的控制器并且它可以工作,问题是为什么它使用凭据未经授权

这是我的创业公司

             public class Startup
            
                public Startup(IConfiguration configuration)
                
                    Configuration = configuration;
                

                public IConfiguration Configuration  get; 

                // This method gets called by the runtime. Use this method to add services to the container.
                public void ConfigureServices(IServiceCollection services)
                
                    services.AddAuthentication(opt => 
                        opt.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                        opt.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
                    )
                    .AddJwtBearer(options =>
                    
                        options.TokenValidationParameters = new TokenValidationParameters
                        
                            ValidateIssuer = true,
                            ValidateAudience = true,
                            ValidateLifetime = true,
                            ValidateIssuerSigningKey = true,

                            ValidIssuer = "https://localhost:44361",
                            ValidAudience = "https://localhost:44378",
                            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("sretKey@345"))
                        ;
                    );

                    services.AddCors(options =>
                    
                        options.AddPolicy("EnableCORS", builder =>
                        
                            builder.WithOrigins("http://localhost:44378")
                            .AllowAnyHeader()
                            .AllowAnyMethod();
                        );
                    );




                    services.AddDbContext<DbContextClass>(options =>
                    options.UseNpgsql(Configuration.GetConnectionString("DefaultConnection")));


               
                    services.AddControllers();

                

                // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
                public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
                
                    if (env.IsDevelopment())
                    
                        app.UseDeveloperExceptionPage();
                    

                    app.UseHttpsRedirection();

                    app.UseRouting();

                    app.UseAuthorization();

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

【问题讨论】:

【参考方案1】:

将 AllowAnonymous 添加到您的登录操作

  [AllowAnonymous]
 [HttpPost("login")]
 public IActionResult Login([FromBody]LoginModel user)

.... your code
var token = new JwtSecurityTokenHandler().WriteToken(tokeOptions);
return Ok(token);


在此之后,您必须配置启动以使用此令牌。您还必须将此令牌添加到 Postman 以进行操作测试。 Postman 有一个特殊的菜单 Autorization。打开它,选择令牌选项并将您的令牌粘贴到该字段中。如果需要,而不是登录并传递输入操作参数

并尝试像这样添加 app.UseAuthentication():

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

【讨论】:

我仍然未授权 您必须配置启动以使用此令牌。你把这个令牌交给邮递员了吗? 我应该分享我的 sturtup 吗? 是的,您是否将此令牌分配给 Postman 进行测试? 我已经通过添加 sturtup 来编辑问题,将令牌添加到邮递员是什么意思,我想一旦我提供正确的用户名并通过,邮递员应该给我一个令牌,不是吗?

以上是关于如何使用 Postman 测试 jwt 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Postman - 使用密钥文件的 JWT 身份验证

带有 JWT 身份验证实现的 Django GraphQL API 仍然允许来自 Postman 的未经身份验证的请求获取数据。我该如何解决?

重定向页面时如何将jwt存储在cookie中并将其传递给身份验证功能?

如何使用 JWT for Google firebase 生成身份验证令牌?

邮递员不使用 JWT 身份验证?

Nest.js Auth Guard JWT 身份验证不断返回 401 未授权