2014-10-02 31 views
7

Yeni bir ASP.NET MVC 4.1 uygulaması üzerinde çalışıyoruz. ASP.NET KİMLİĞİ öğelerini karıştırıyoruz ve şifre sıfırlama ve yeni davet için jetonlarla mücadele ediyoruz. Oluşturulan belirteçlerin sona erme süresini ayarlama yolu bulmak gibi görünmüyor ve varsayılan olarak yaklaşık 10 dakika olarak ayarlanmış gibi görünüyor. Kullanıcı belirteç sağlayıcısı olarak bir EmailTokenProvider kullanıyoruz, çünkü kullanıcı üzerindeki güvenlik damgasıyla iyi çalışıyor gibi görünüyor.UserTokenProvider belirteci son kullanma tarihi nasıl ayarlanır

Jetonlar için son kullanma tarihini nasıl ayarlayabiliriz - ideal olarak, sıfırlama şifresi belirteçleri için Vs'yi farklı şekilde ayarlamak isteriz.

Bizim kullanıcı yöneticisi şuna benzer:

var manager = new UserManager<User, long>(new UserStore(new UserRepository())); 
manager.UserValidator = new UserValidator<User, long>(manager) {AllowOnlyAlphanumericUserNames = false, RequireUniqueEmail = true}; 
manager.UserTokenProvider = new EmailTokenProvider<User, long>(); 

bir kullanıcı bir şifre sıfırlama bağlantısının istekleri

biz jetonu almak ve kullanıcıya bu aktarmak

var token = await _userManager.GeneratePasswordResetTokenAsync(user.Id);

diyoruz. bir kullanıcı davet edildiğinde

, biz diyoruz:

var token = await _userManager.GenerateUserTokenAsync("FirstLogin", user.Id);

jetonu almak ve göndermek için.

cevap

2

varsayılan uygulamaları simgeyi değiştirmek için izin vermez Son kullanma tarihi, bu kimlik 3.0 için düşündüğümüz bir şey.

+1

Güncelleme için teşekkürler. Ben 'DataProtectorTokenProvider' kullanarak belirteçleri uzun ömürleri için daha iyi bir seçim olduğunu buldum. –

+1

Bu oldukça değersiz, bu keyfi sona erme süresinde herhangi bir belge bile yok. – Cloud

+0

@ hao-kung Lütfen varsayılan sıfırlama şifresi belirteç süresinin ne olduğunu paylaşır mısınız? – vmachacek

1

Ben de sorunuzu anlamak, aşağıdaki yardımcı olabilir: o zaman

private static string CalculateToken(User user) 
    { 
     byte[] time = BitConverter.GetBytes(DateTime.UtcNow.ToBinary()); 
     byte[] key = BitConverter.GetBytes(user.ID); 
     string token = Convert.ToBase64String(time.Concat(key).ToArray()); 
     return token; 
    } 

Ve: 2.0 belirteç sağlayıcılarının

DateTime time = DateTime.FromBinary(BitConverter.ToInt64(data, 0)); 
    int id = BitConverter.ToInt32(data, 8); 

    if (time< DateTime.UtcNow.AddMinutes(-10) || user.ID != id) 
      { 
       //too old or IDs not matching 
      } 
İlgili konular