SORU
8 Mayıs 2009, Cuma


Üreten bir şifreli kimlik doğrulama belirteçleri güvenli

Arka plan:

Bu gerçekten de genel en iyi uygulamalar soru olacak ama özel durum hakkında biraz bilgi yardımcı olabilir:

Bir "iPhone için uygulama bağlı geliştiriyoruz DİNLENME hizmetleri ile arka uç uygulama ile iletişim kurar. Sipariş vermek için istemi kullanıcı için bir kullanıcı adı ve parola her zaman başlatmak uygulama, biz ortaya bir "Giriş" hizmet doğrular kullanıcı adı ve şifre ilk kalkış ve döndürür bir kimlik doğrulama belirteci için kullanılabilecek geleceğin web hizmet istekleri için gerçek veri. Belirteç sonra kullanıcı adı/şifre ile yeniden kimlik doğrulaması için onlara sorarız bir sona erme zamanı olabilir.

Soru:

Kimlik doğrulama için kullanılacak simge bu tür oluşturmak için en iyi uygulamalar nelerdir?

Örneğin, biz...

  • (SHA-256, vb.) rastgele bir dize karma ve verilen kullanıcı son kullanma tarihi ile birlikte veritabanında saklayın. Uyuyor emin olmak için bir sonraki isteği üzerine belirtecin basit bir arama yapın.
  • Kullanıcı gizli bir anahtar ile kimlik ve bazı ek bilgiler (zaman damgası vb) Encrypte. ABD tarafından verilmiş olduğundan emin olmak için izleyen isteklerde token şifresini çözmek.

Bu çözülmüş bir sorun olmalı gibi geliyor.

CEVAP
13 Mayıs 2009, ÇARŞAMBA


Bu soruya başka cevaplar, ek araştırma ve çevrimdışı tartışmalar geribildirim dayanarak, burada ne yapmayı bitirdiğimizi

Etkileşim modeli burada bir "ben" onay kutusu işaretli. hatırlıyor musun tam olarak ASP.NET model Formları tarafından kullanılan aynı kimlik Doğrulama aslında bu oldukça hızlı bir şekilde işaret edildi Sadece bir web tarayıcı HTTP isteklerini yapmak değil. "Bilet" kimlik Doğrulama kümesi oluşturan tanımlama. equivilant bizim Aslında kimlik Doğrulaması kullanır formları "gizli bir anahtar ile bazı verileri şifrelemek" varsayılan yaklaşım.

Giriş web hizmeti, bilet oluşturmak için bu kodu kullanıyoruz:

string[] userData = new string[4];

// fill the userData array with the information we need for subsequent requests
userData[0] = ...; // data we need
userData[1] = ...; // other data, etc

// create a Forms Auth ticket with the username and the user data. 
FormsAuthenticationTicket formsTicket = new FormsAuthenticationTicket(
    1,
    username,
    DateTime.Now,
    DateTime.Now.AddMinutes(DefaultTimeout),
    true,
    string.Join(UserDataDelimiter, userData)
    );

// encrypt the ticket
string encryptedTicket = FormsAuthentication.Encrypt(formsTicket);

Sonra HTTP biletinizi denetler isteği başlıklarını bir İParameterİnspector ekleyen bisiklet Federasyonu hizmetler için operasyon davranış bir nitelik. Geliştiriciler kimlik doğrulama gerektiren işlemleri bu işlemi davranış özniteliği. Bu kod bileti ayrıştırır.

// get the Forms Auth ticket object back from the encrypted Ticket
FormsAuthenticationTicket formsTicket = FormsAuthentication.Decrypt(encryptedTicket);

// split the user data back apart
string[] userData = formsTicket.UserData.Split(new string[] { UserDataDelimiter }, StringSplitOptions.None);

// verify that the username in the ticket matches the username that was sent with the request
if (formsTicket.Name == expectedUsername)
{
    // ticket is valid
    ...
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ampisound

    Ampisound

    12 Kasım 2006
  • The CGBros

    The CGBros

    20 AĞUSTOS 2011
  • Truc Minh

    Truc Minh

    23 Ocak 2011