public async Task <JsonWebToken> Handle(RefreshAccessToken request, CancellationToken cancellationToken) { var token = request.Token; var refreshToken = await RefreshTokenRepository.GetAsync(token); if (refreshToken == null) { throw new IdentityException(Codes.RefreshTokenNotFound, "Refresh accessToken was not found."); } if (refreshToken.Revoked) { throw new IdentityException(Codes.RefreshTokenAlreadyRevoked, $"Refresh accessToken: '{refreshToken.Id}' was revoked."); } var user = await GetUserOrThrowAsync(refreshToken.UserId); var claims = await ClaimsProvider.GetAsync(user.Id); var jwt = JwtService.CreateToken(user.Id.ToString("N"), user.Role, claims); jwt.RefreshToken = refreshToken.Token; var @event = new AccessTokenRefreshedIntegrationEvent(user.Id); BusPublisher.Publish(@event); return(jwt); }
public async Task <Unit> Handle(RevokeRefreshToken request, CancellationToken cancellationToken) { var token = request.Token; var userId = request.UserId; var refreshToken = await RefreshTokenRepository.GetAsync(token); if (refreshToken == null || refreshToken.UserId != userId) { throw new IdentityException(Codes.RefreshTokenNotFound, "Refresh accessToken was not found."); } refreshToken.Revoke(); await RefreshTokenRepository.UpdateAndSaveAsync(refreshToken); return(Unit.Value); }