private async Task <RefreshTokenGrant> GetRefreshTokenGrantAsync(TClient client, string refreshToken) { var grantIdKey = new RefreshTokenGrant.IdKey { TenantName = RouteBinding.TenantName, TrackName = RouteBinding.TrackName, RefreshToken = refreshToken }; await grantIdKey.ValidateObjectAsync(); var id = await RefreshTokenGrant.IdFormat(grantIdKey); if (refreshToken.StartsWith('u')) { return(await tenantRepository.GetAsync <RefreshTokenGrant>(id, required : false, delete : client.RefreshTokenUseOneTime == true)); } else if (refreshToken.StartsWith('t')) { return(await tenantRepository.GetAsync <RefreshTokenTtlGrant>(id, required : false, delete : client.RefreshTokenUseOneTime == true)); } else { throw new OAuthRequestException("Invalid first info char in Refresh Token grant.") { RouteBinding = RouteBinding, Error = IdentityConstants.ResponseErrors.InvalidGrant }; } }
public async Task DeleteRefreshTokenGrantAsync(TClient client, string sessionId) { if (sessionId.IsNullOrWhiteSpace()) { return; } logger.ScopeTrace($"Delete Refresh Token grant, Route '{RouteBinding.Route}', Session ID '{sessionId}'."); var idKey = new Track.IdKey { TenantName = RouteBinding.TenantName, TrackName = RouteBinding.TrackName }; await idKey.ValidateObjectAsync(); RefreshTokenGrant grant = await tenantRepository.DeleteAsync <RefreshTokenTtlGrant>(idKey, d => d.SessionId == sessionId); if (grant != null) { logger.ScopeTrace($"TTL Refresh Token grant deleted, Refresh Token '{grant.RefreshToken}', Session ID '{sessionId}'."); } else { grant = await tenantRepository.DeleteAsync <RefreshTokenGrant>(idKey, d => d.SessionId == sessionId); if (grant != null) { logger.ScopeTrace($"Refresh Token grant deleted, Refresh Token '{grant.RefreshToken}', Session ID '{sessionId}'."); } } }
public async Task SaveRefreshTokenGrantAsync(RefreshTokenGrant refreshTokenGrant) { var clientIntId = await _outbackDbContext.Clients.Where(m => m.ClientId == refreshTokenGrant.ClientId).Select(m => m.Id).SingleAsync(); await _outbackDbContext.RefreshTokenGrants.AddAsync(new OutbackRefreshTokenGrant { ClientId = clientIntId, Expires = refreshTokenGrant.Expires, RefreshToken = refreshTokenGrant.RefreshToken, Scope = refreshTokenGrant.Scope, SubjectId = Guid.Parse(refreshTokenGrant.SubjectId), }); await _outbackDbContext.SaveChangesAsync(); }
private async Task <RefreshTokenGrant> CreateGrantInternal(TClient client, List <ClaimAndValues> claims, string scope, string refreshToken, long?createTime = null, long?utcNow = null) { RefreshTokenGrant grant = null; if (refreshToken.StartsWith('u')) { grant = new RefreshTokenGrant(); } else if (refreshToken.StartsWith('t')) { var refreshTokenAbsoluteLifetime = client.RefreshTokenAbsoluteLifetime.Value; if (createTime.HasValue && utcNow.HasValue) { refreshTokenAbsoluteLifetime = refreshTokenAbsoluteLifetime - Convert.ToInt32(utcNow.Value - createTime.Value); } grant = new RefreshTokenTtlGrant { TimeToLive = client.RefreshTokenLifetime.Value <= refreshTokenAbsoluteLifetime ? client.RefreshTokenLifetime.Value : refreshTokenAbsoluteLifetime }; } else { throw new OAuthRequestException("Invalid first info char in Refresh Token grant.") { RouteBinding = RouteBinding, Error = IdentityConstants.ResponseErrors.InvalidGrant }; } grant.CreateTime = createTime ?? DateTimeOffset.UtcNow.ToUnixTimeSeconds(); grant.Claims = claims; grant.ClientId = client.ClientId; grant.Scope = scope; grant.SessionId = claims.Where(c => c.Claim == JwtClaimTypes.SessionId).Select(c => c.Values.FirstOrDefault()).FirstOrDefault(); await grant.SetIdAsync(new RefreshTokenGrant.IdKey { TenantName = RouteBinding.TenantName, TrackName = RouteBinding.TrackName, RefreshToken = refreshToken }); await tenantRepository.SaveAsync(grant); return(grant); }
public Task SaveRefreshTokenGrant(RefreshTokenGrant refreshTokenGrant) { throw new System.NotImplementedException(); }
private static Task <Session> Create(HttpClient client, RefreshTokenGrant grant, string baseURL) { return(Grant(client, grant.ToJSON(), baseURL)); }