处理情况新智威汤逊令牌也为同一证书和安全性产生以前的JWT令牌

问题描述 投票:3回答:1

我在点网核心网络2.2 API应用程序有智威汤逊认证还有期满截止日期

在这里我对这个JWT令牌和安全的Web API令牌基地的一些问题

1:在这里我有具有相同重新登录(为同一用户),我以前的JWT令牌的问题就在这里令牌是不同的,但与前一个同样有效,直至其到期日,所以我想知道我怎么能处理以前的令牌这仍然是有效的,但没有为同一creandiantial产生一个新的令牌

2:想验证我的令牌来自受信任的来源(在这里我也加入了CROS在我startup.cs)。所以有验证令牌命中来自可信任/ varify(用户身份验证令牌)任何地方更安全的方法

3:我应该怎么做才能让我的安全令牌上(用户到服务器和服务器到用户端)喜欢使用HTTPS的SSL认证

我需要一些建议,做出最佳的安全安全DOTNET核心Web API

代码生成JWT

 string BuildToken(int userId)
    {
        var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:Key"]));
        var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

        var token = new JwtSecurityToken(
            _configuration["Jwt:Issuer"],
          _configuration["Jwt:Issuer"],
          new List<Claim> {
          new Claim(ClaimTypes.NameIdentifier , userId.ToString())
          },
          expires: GetExpireDate(),
          signingCredentials: creds);

        return new JwtSecurityTokenHandler().WriteToken(token);
    }
.net .net-core jwt asp.net-core-2.2
1个回答
3
投票

一旦JWT产生,它被认为是有效的,直到它的到期日失效,或签名变为无效。这是一个令牌可以“过期”的唯一途径。生成多个令牌是完全有效的。但是,他们应该总是因为如果他们受到损害,他们可以由任何人使用的寿命很短(几分钟)。

处理这种情况的方法是使用刷新标记。它们允许你存储你的服务器,你可以用它来启用/禁用令牌的进一步补发特定用户上的值。

为了更完整的解释和例子,看看这个页面:http://jasonwatmore.com/post/2018/08/14/aspnet-core-21-jwt-authentication-tutorial-with-example-api

要点2:即通过AuthHeader进来的所有令牌被认为是进行验证。验证在磊科采用自动根据您在配置JWT当应用配置的地方。

所以,你的令牌验证配置,如下所示:

public void ConfigureServices(IServiceCollection services)
{
     // configure jwt authentication
     var appSettings = appSettingsSection.Get<AppSettings>();
     var key = Encoding.ASCII.GetBytes(appSettings.Secret);
     services.AddAuthentication(x =>
     {
         x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
         x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
     })
     .AddJwtBearer(x =>
     {
         x.RequireHttpsMetadata = false;
         x.SaveToken = true;
         x.TokenValidationParameters = new TokenValidationParameters
         {
             ValidateIssuerSigningKey = true,
             IssuerSigningKey = new SymmetricSecurityKey(key),
             ValidateIssuer = false,
             ValidateAudience = false
         };
     });
}

而在你的应用程序启动:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseCors(x => x
       .AllowAnyOrigin()
       .AllowAnyMethod()
       .AllowAnyHeader());

    **app.UseAuthentication();**
    app.UseMvc();
}

最后,你需要到[授权]属性应用到你的控制器,如下所示:

**[Authorize]**
[ApiController]
[Route("[controller]")]
public class UsersController : ControllerBase
{
}

其基本思想是,你“创建”你的“登录”方法的标记,并将其返回给调用者 - 然后传递同样的道理回从客户端服务。所提供的令牌与你用于设置ConfigureServices方法相同的设置创建的,它由中间件被读取并施加到用户属性上的HttpContext像这样:

public Controller(IHttpContextAccessor httpContextAccessor)
{
    var userId = HttpContextAccessor.HttpContext.User;
}

如果令牌被拒绝,401一个的HTTPStatus代码将被自动发送回主叫方消息“未授权”

要点3:是的,最好的,也许只有这样,才能确保JWT令牌本身是正确的,通过使用HTTPS真的。令牌的“签名”组分犯规将其固定或防止它被盗用;它只是提供了一种手段来确保它未被篡改

© www.soinside.com 2019 - 2024. All rights reserved.