public async Task CreateAsync(AuthenticationTokenCreateContext context) {
			var clientid = context.Ticket.Properties.Dictionary["as:client_id"];

			if (string.IsNullOrEmpty(clientid)) {
				return;
			}

			var refreshTokenId = Guid.NewGuid().ToString("n");

			using (AuthRepository repo = new AuthRepository()) {
				var refreshTokenLifeTime = context.OwinContext.Get<string>("as:clientRefreshTokenLifeTime");

				var token = new RefreshToken() {
					Id = Helper.GetHash(refreshTokenId),
					ClientId = clientid,
					Subject = context.Ticket.Identity.Name,
					IssuedUtc = DateTime.UtcNow,
					ExpiresUtc = DateTime.UtcNow.AddMinutes(Convert.ToDouble(refreshTokenLifeTime))
				};

				context.Ticket.Properties.IssuedUtc = token.IssuedUtc;
				context.Ticket.Properties.ExpiresUtc = token.ExpiresUtc;

				token.ProtectedTicket = context.SerializeTicket();

				var result = await repo.AddRefreshToken(token);

				if (result) {
					context.SetToken(refreshTokenId);
				}

			}
		}
Beispiel #2
0
		public async Task<bool> AddRefreshToken(RefreshToken token) {
			var existingToken = _ctx.RefreshTokens.SingleOrDefault(r => r.Subject == token.Subject && r.ClientId == token.ClientId);

			if (existingToken != null) {
				var result = await RemoveRefreshToken(existingToken);
			}

			_ctx.RefreshTokens.Add(token);

			return await _ctx.SaveChangesAsync() > 0;
		}
Beispiel #3
0
		public async Task<bool> RemoveRefreshToken(RefreshToken refreshToken) {
			_ctx.RefreshTokens.Remove(refreshToken);
			return await _ctx.SaveChangesAsync() > 0;
		}