public async Task <ActionResult> RefreshToken(RefreshTokenRequest request) { var refreshToken = await _tokenService.GetTokenAsync(request.RefreshToken, request.Login); if (refreshToken != null) { if (refreshToken.ExcpirationDate > DateTime.UtcNow) { var currentTime = DateTime.UtcNow; var accessToken = new JwtSecurityToken( expires: currentTime.AddMinutes(_settings.Auth.AccessTokenLifetime), signingCredentials: new SigningCredentials( AuthManager.CreateSymmetricSecurityKey(_settings.SecretKey), SecurityAlgorithms.HmacSha256)); var encodedJwt = new JwtSecurityTokenHandler().WriteToken(accessToken); return(Ok(new AuthResponse { AccessToken = encodedJwt, RefreshToken = refreshToken.Token, Login = request.Login, })); } } return(Unauthorized()); }
public async Task <ActionResult> GetToken(AuthRequest request) { var user = await _userService.GetUserAsync(request.Login); if (user == null) { return(BadRequest()); } var currentTime = DateTime.UtcNow; var token = new JwtSecurityToken( expires: currentTime.AddMinutes(_settings.Auth.AccessTokenLifetime), signingCredentials: new SigningCredentials( AuthManager.CreateSymmetricSecurityKey(_settings.SecretKey), SecurityAlgorithms.HmacSha256)); var encodedJwt = new JwtSecurityTokenHandler().WriteToken(token); var refreshToken = await _tokenService.CreateTokenAsync( new RefreshToken { Token = GenerateRefreshToken(), ExcpirationDate = currentTime.AddMinutes(_settings.Auth.RefreshTokenLifetime), UserLogin = user.Login }); return(Ok(new AuthResponse { AccessToken = encodedJwt, RefreshToken = refreshToken.Token, Login = user.Login, })); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.Configure <AppSettings>(Configuration); var key = Configuration.GetValue <string>("SecretKey"); services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.RequireHttpsMetadata = false; options.TokenValidationParameters = new TokenValidationParameters { ValidateAudience = false, ValidateIssuer = false, ValidateLifetime = true, IssuerSigningKey = AuthManager.CreateSymmetricSecurityKey(key), ValidateIssuerSigningKey = true, ClockSkew = TimeSpan.Zero }; }); services.AddScoped <IUserService, UserStorageService>(); services.AddScoped <ITokenService, TokenStorageService>(); var conString = Configuration.GetValue <string>("StorageConnectionString"); services.AddSingleton <ITableStorageContext>(new TableStorageContext(conString)); services.AddControllers(); services.AddSwaggerGen(options => { options.SwaggerDoc("v1", new OpenApiInfo { Version = "v1", Title = "Auth service Api", Description = "Access and refresh tokens" }); }); services.AddAutoMapper(typeof(Startup)); }