2010-08-18 10 views
17

İlk iPad uygulamamı oluşturuyorum. Kimlik doğrulaması yapmak ve verileri RESTful bir şekilde çekmek istediğim bir web uygulamasına sahibim.iOS: Kimlik bilgilerini geçmek için güvenli bir HTTPS bağlantısı nasıl yapılır?

Tarayıcıda URL'yi açarsanız (https://myapp.com/auth/login), kullanıcı adınızı ve şifrenizi girmek için bir form alırsınız. Giriş kimlik bilgilerini isteğin posta verisinde ayarlayabileceğimi ve verileri gönderebileceğimi düşünüyordum.

Site, giriş için HTTPS kullanır, böylece kimlik bilgileri Internet üzerinden düz metinde geçmez.

Kimlik bilgilerini geçmek için nasıl güvenli bir HTTPS bağlantısı yapabilirim? Bu, gelecekteki talepler için giriş yaptığımı hatırlayacak mı? Bunu yapmanın en iyi yolu nedir?

cevap

13

Ayrıntılı güncelleme, Ekim 2013

Ben bu cevabı yazdım anda ASIHTTPRequest yaygın şekilde desteklenen muhafaza olmasına rağmen, bu artık bir durumdur. Yeni projeler için önerilmez - bunun yerine doğrudan NSURLConnection'ı kullanın veya AFNetworking'i kullanın.

AFNetworking ile, http kimlik doğrulaması için bir [httpClient setAuthorizationHeaderWithUsername:username password:password]; yöntemi vardır ve bir POST stili formu eşit derecede kolaydır - bunun için bkz. AFNetworking Post Request.


Orjinal cevap: Birçok insan bunu zaman içinde zor olan kullanışlı özellikleri bir yeri vardır gibi http & https iPhone/iPad'de başa ASIHTTPRequest sınıfını kullanın

sınıflar yerleşik ulaşmak için:

http://allseeing-i.com/ASIHTTPRequest/

en basit düzeyde başlayarak gibi bir şey ile başlamak istiyorum:

NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"]; 
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 

    [request startSynchronous]; 
    NSError *error = [request error]; 
    if (!error) { 
     NSString *response = [request responseString]; 
     NSLog(@"response = %@", response); 
    } 

HTTP kimlik doğrulaması kullanıyorsanız, ASIHTTPRequest kullanıcıyı otomatik olarak kullanıcı adı ve parola ister.

Başka bir kimlik doğrulama formu kullanıyorsanız, muhtemelen kullanıcı adınızı ve parolanızı kendiniz istemelisiniz ve bunları bir POST değeri veya özel bir http başlığı olarak göndermeniz gerekir, ardından yanıt bir belirteç içerebilir JSON veya XML yanıtında veya bir çerez ayarlayabilir.

Kimlik doğrulama şemasının nasıl çalıştığına dair daha fazla ayrıntı eklerseniz, biraz daha spesifik olabilirim.Ayrıca istek oluşturmak şeklini değiştirmek gerekir

[request addPostValue:usernameString forKey:@"username"]; 
[request addPostValue:passwordString forKey:@"password"]; 

:

Güncelleme güncelleme dayanarak

, sadece gibi satırları eklemeniz gerekir POST formu taklit etmek bunun yerine:

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 

yapın:

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 

(Yukarıda da bahsettiğim gibi, daha önce koyduğum bir kodun eşzamanlı bir istek kullandığını, dolayısıyla çalıştığını kanıtladığınızda kullanıcı arayüzünü engellememek için bunu eşzamansız biriyle değiştirmek istersiniz.)

burada iphone için bir JSON çerçeve var: Benim için iyi çalışıyor ve ASIHTTPRequest ile kullanımı basittir

http://code.google.com/p/json-framework/

.

+0

Biraz daha fazla açıklama ekledim. Uygulama, temel HTTP kimlik doğrulaması değildir. Bir web sayfasında kimlik bilgilerinizi girdiğiniz bir formdur. Bunu düzeltmeye çalışıyorum, böylece veriye karşı kimlik doğrulaması yapabildiğim ve sorgulayabileceğim (JSON biçiminde döndürülen) bir RESTful API'si olarak davranabilirim. – Andrew

+0

Tamam, cevabımı biraz daha ayrıntılı olarak güncelledim. Aslında ASIHTTPRequest ile her şey çok basit olmalıdır. – JosephH

+0

Yani,/auth/login isteğini gönderdiğimde, iPhone uygulamamın kimliği doğrulandığını hatırlayacak mı? Tarayıcıda, ayarlanan çerezler var. Başka bir deyişle, şimdi "doğrulanmış" olduğumu, kimlik doğrulamanızı gerektiren başka bir istekte bulunabilir miyim? (yani GET/kullanicilar/hepsi) – Andrew

İlgili konular