Пример #1
0
    public async Task<bool> AddRefreshToken(RefreshToken token)
    {
      var existingTokens = this._ctx.RefreshTokens.Where(r => r.Subject == token.Subject && r.ClientId == token.ClientId);

      if (existingTokens.Any())
      {
        var result = await this.RemoveRefreshToken(existingTokens.ToArray());
      }

      this._ctx.RefreshTokens.Add(token);

      return await this._ctx.SaveChangesAsync() > 0;
    }
    public async Task CreateAsync(AuthenticationTokenCreateContext context)
    {
      var clientid = context.Ticket.Properties.Dictionary["as:client_id"];
      var email = context.Ticket.Properties.Dictionary["email"];

      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 = email,
          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);
        }

      }
    }