SORU
19 Ocak 2009, PAZARTESİ


DİNLENME ve Kimlik Doğrulama türevleri

Şu an için bir DİNLENME kütüphane çalışıyorum .net ve açık bir nokta hakkında bazı fikirlerini duymak isterim: DİNLENME ve Kimlik Doğrulama.

Burada Huzurlu bir arayüz kütüphanesi ile kullanılan bir örnek:

[RestRoot("/user")]
public interface IUserInterface
{
  [RestPut("/")]
  void Add(User user);

  [RestGet("/")]
  int[] List();

  [RestGet("/get/{id}")]
  User Get(int id);

  [RestDelete("/delete/{id}")]
  void Delete(int id);
}

Sunucu kodu sonra sadece arayüzü ve müşterileri bir fabrika ile aynı arayüz elde edebilirsiniz uygular. Veya, istemci kitaplığı standart bir HTTP isteği kullanarak değil, aynı zamanda çalışır.

HTTP Temel Kimlik doğrulaması kullanarak veya istekleri authenticated users gerektiren bir belirteç göndermek en önemli yolu olduğunu biliyorum.

İlk yöntem (HTTP Basic Auth), aşağıdaki sorunlar (kısmen web tarayıcı özel) sahiptir:

  • Parola her talebi iletilir - SSL bile bu tür "vardır". kötü bir his
  • Parola isteği başlığı ile iletilir beri, yerel bir saldırganın aktarılan başlıkların altında parola kazanmak için bakmak için daha kolay olurdu.
  • Şifre tarayıcılar bellek mevcuttur.
  • Kullanım süresi için standart bir yolu "oturumlar".
  • Bir tarayıcı ile giriş bak kesmeleri ve bir sayfanın hissediyorum.

İkinci yöntem için sorunları uygulama ve kütüphane kullanımı üzerinde daha fazla duruldu

  • Kimlik doğrulama ihtiyaçları olan her istek URI sadece çok tekrarlı olan token için bir parametre olmalı.
  • Eğer her yöntem Uygulama Eğer bir belirteç geçerli olup olmadığını kontrol etmek gerekiyorsa yazmak için çok daha fazla kod var.
  • Arabirimi [RestGet("/get/{id}")] vs [RestGet("/get/{id}/{token}")] örneğin, daha az belirli olur.
  • Belirteç koymak nerede: URI? sonunda sonra kök? başka bir yerde?

Benim fikrim belirteç http:/server/user/get/1234?token=token_id gibi URL olarak parametre geçmek oldu.

Başka bir olasılık, bir HTTP Başlığı parametre olarak göndermek olabilir, ama bu sanırım normal HTTP müşterilerle kullanımı zorlaştıracaktır.

Belirteç istemciye özel bir HTTP başlığı olarak geçmiş olsun istiyorsunuz ("X-Session-İd") her isteği.

Bu daha sonra arayüzü tamamen soyutlanmış olabilir, ve herhangi bir uygulama kimlik doğrulaması gerek sadece token karar verirseniz ait isteyebilir.

Bu DİNLENME çok fazla ihlal edeceğini düşünüyor musunuz ya da daha iyi bir fikrin var mı?

CEVAP
21 Ocak 2009, ÇARŞAMBA


Kimlik doğrulama ayrıntılar ait inanmak başlığında, URİ gibi bir eğilimim yok. Eğer bir belirteç olmaktan URI yerleştirilen güveniyorsanız, o zaman uygulamanızda her URI simge eklemek için kodlanması gerekir. Önbellekleme de olumsuz etkileri olacaktır. Sürekli değişen bir belirteç ile kaynakları artık önbelleğe alınmış olacak. Kaynak ile ilgili bilgi URI, kimlik bilgileri gibi uygulama ile ilgili verileri aittir.

Bir müşteri olarak web tarayıcıları hedef olması gerekir gibi görünüyor? HTTP Digest access authentication kullanarak veya müşterilerin kendi SSL sertifikalarını veren benzersiz bir şekilde tanımlamak ve doğrulamak için araştırmak olabilir. Ayrıca, oturum çerezlerini mutlaka kötü bir şey olduğunu sanmıyorum. Bir tarayıcı ile uğraşmak zorunda özellikle. Tanımlama kodu kullanma ve uygulama sonuna kadar dayanın değil yalıtmak sürece sorun yok. Anahtar sadece oturumda kullanıcı kimliğini saklamak, başka bir şey değil. Kötüye sunucu tarafında oturum durumu yok.

Eğer müşteriler tarayıcısından başka hedef varsa alabilir yaklaşımlar vardır. Amazon S3 Authentication mekanizma kullanma şansım olmadı.

Bu tabii ki çok özneldir. Saflık ve aşağıdaki mektubu DİNLENMEK bazen pratik olabilir. Sen en aza indirmek ve bu tür bir davranış izole sürece, uygulamanızı çekirdeği yine de Dinlendirici olabilir. Ben çok RESTful Web Services KALAN bilgi ve yaklaşımları büyük bir kaynak olarak öneriyorum.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • JTechTalk

    JTechTalk

    11 Temmuz 2010
  • natescamp

    natescamp

    30 NİSAN 2009
  • WHZGUD2

    WHZGUD2

    21 EYLÜL 2011