Пример #1
0
        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
                      };
            }
        }
Пример #2
0
        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}'.");
                }
            }
        }
Пример #3
0
        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();
        }
Пример #4
0
        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);
        }
Пример #5
0
 public Task SaveRefreshTokenGrant(RefreshTokenGrant refreshTokenGrant)
 {
     throw new System.NotImplementedException();
 }
Пример #6
0
 private static Task <Session> Create(HttpClient client, RefreshTokenGrant grant, string baseURL)
 {
     return(Grant(client, grant.ToJSON(), baseURL));
 }