2010-05-20 23 views
6

Bir web servisi geliştiriyorum ve bir GET yönteminde servise kullanıcı adı ve şifre göndermem gerekiyor. Ssl gibi güvenli bir kanal üzerinden geçtiği sürece bu bilgiyi uri'ye göndermek doğru mu? Başka bir deyişle,/users/{username}/{cleartext_password} gibi görünen bir uri alabilir miyim?Web hizmetine kullanıcı adı ve şifre gönderme

Düzeltme: Maalesef, belirsiz olduğumu düşünüyorum. Web servisi esas olarak kullanıcı adları ve karma şifrelerden oluşan bir veritabanıdır. Kullanıcı adlarını ve parolaları uzak bir veritabanında tutan bir masaüstü uygulaması düşünün. Son kullanıcı, kullanıcı adını ve şifresini uygulamaya ekler ve uygulama, kullanıcının kimliğini doğrulamak için web servisine erişir. Bu nedenle, uygulamanın bir son kullanıcının kullanıcı adı ve şifresiz şifresini hizmete göndermesi gerekecektir. Servis, kullanıcı adı ve şifreyi alacak ve kullanıcı adı ile şifrenin karmasının kullanıcı adı ve şifreli şifreyle eşleştiğini kontrol edecektir. Uygulamanın, hizmete erişebilmesinden önce kimlik doğrulaması yapması gerekecek, ancak son kullanıcının kimliğini doğrulamak için son kullanıcının kullanıcı adını ve parolasını hizmete göndermenin en iyi yolunun ne olduğunu merak ediyorum. POST yöntemini kullanmıyorum çünkü sadece kimlik doğrulaması yapıyorum ve bu nedenle sunucunun durumunu değiştirmiyorum. Karışıklık için özür dilerim.

cevap

0

Genel olarak konuşmak iyi bir fikir değildir ... Bu veri bir dizi günlük dosyasında mevcut olacaktır, dolayısıyla veriler onu görmemesi gereken kişiler tarafından görülebilir. En azından, eğer yapabilmeniz için göndermeden önce bunu eklemeli veya şifrelemelisiniz. o güvenli bir kanal üzerinden gidiyorsa

İşte Is an HTTPS query string secure?

+0

Yoksa iki yönlü SSL kimlik doğrulaması yapıyor içine bakmak olabilir.Kullanıcılar, sunucuların yaptığı gibi sertifikalara ihtiyaç duyar, ancak sunucu kullanıcıyı güvenli bir şekilde doğrulayabilir. – mpez0

0

... biraz daha ayrıntı için ilgili tartışma, düz yazı olarak adı ve şifre göndererek hiçbir problem var. Sadece onları güvenli olmayan bir kanal üzerinden net metin olarak göndermelerini ve her istek için tekrar tekrar göndermelerini öneriyorum.

Yapabilecekleriniz, önce web servisine kimlik doğrulama (ssl aracılığıyla kullanıcı adı ve parolayı cleartext olarak gönder) ve tanınacağı sunucudan bir jeton almanızdır. Ardından, her bir sonraki istekle bu belirteci gönderin.

+0

Örneğin, Google, kullanıcı adlarını ve şifrelerini, kendi API'ları için bir SID almak üzere SSL üzerinden göndermenize olanak tanır ... ardından, bu SID'yi sonraki her bir GET isteğiyle bir çerezde gönderirsiniz. Sadece iyi çalışıyor. – EAMann

7

Bunu yapın.

Bir "anahtar" ve "özet" gönderin.

"Anahtar" bir kullanıcı adıyla eşdeğerdir.

"Özet", anahtarın SHA1 (veya MD5) karması, URI ve bir "paylaşılan gizli" veya paroladır.

Sunucu bunu aldığında, anahtarın, talep edilen URI'ya ve "paylaşılan gizli" veya parolaya dayanarak, özetin kendi sürümünü hesaplar. Sindirmelerin eşleşmemesi 401 hata yanıtıdır.

+0

Bu aslında çok zarif bir çözüm ... – EAMann

0

SSL, URI'yi şifreler, ancak kesinlikle bazı alternatiflere göz atın. Bu sadece bazıları aşağıda verilmiştir:

HTTP Basic Auth

Ayrıca URI'lerinin aynı derecede günlük dosyalarında

NB sona ermeyecek

vb güzel ve basit ve iyi tarayıcılar, web sunucularına tarafından desteklenmemektedir düz metin HTTP Üstbilgileri, bu nedenle kesinlikle SSL olmayan uygulamalar için önerilmez.

http://en.wikipedia.org/wiki/Basic_access_authentication

İlgili konular