2011-03-27 11 views
10

मेरे पास एक ऐसा एप्लिकेशन है जो रेल 3 पर तैयार करता है। मैं http प्रमाणीकरण को सक्षम करना चाहता हूं ताकि मैं अपने आईप ऐप से अपने ऐप ऐप को प्रमाणित कर सकूं। मैं अपने आईफोन ऐप से तैयार करने के लिए कैसे प्रमाणित कर सकता हूं?devise और rails में http प्रमाणीकरण 3

क्या यह सुरक्षित है या मैं अलग-अलग प्रमाणीकरण कर रहा हूं?

+0

HI क्या आपको कोई समाधान मिला है, कृपया – santosh

उत्तर

6

दृश्य आपको 3 विकल्प मिल गया है के डिजाइन बिंदु से:

1) बुनियादी HTTP प्रमाणीकरण का उपयोग करें: अपने IPhone अनुप्रयोग एक गुप्त कुंजी -which अपने IPhone अनुप्रयोग कोड में पकाया जाता है है - प्रत्येक अनुरोध को प्रमाणित करने का उपयोग करता है वेब ऐप के साथ। Google खोज: "मूल http प्रमाणीकरण तैयार करें"

2) आप अपने आईपोन ऐप में सार्वजनिक प्रमाणपत्र और अपने वेब ऐप पर एक निजी प्रमाणपत्र प्राप्त करके https का उपयोग कर सकते हैं। यह सही तरीके से कॉन्फ़िगर करने के लिए बहुत काम है, यह आपके आईफोन ऐप से बहुत सुरक्षित है और रेल सर्वर एन्क्रिप्टेड चैनल पर संदेशों का आदान-प्रदान कर रहा है। सुरक्षा आपके रेल कोड के लिए भी पारदर्शी है क्योंकि परिवहन स्तर पर प्रमाणीकरण किया जाता है।

3) आईफोन ऐप https का उपयोग करके वेब ऐप से जुड़ता है, प्रमाणीकरण टोकन प्राप्त करता है जिसे वह नियमित रूप से http पर वेब ऐप पर कॉल करने के लिए उपयोग करता है। कुंजी की समाप्ति के बाद 1 से अधिक सुरक्षित, लागू करने के लिए काफी काम और बहुत स्केलेबल। (http://matteomelani.wordpress.com/2011/10/17/authentication-for-mobile-devices/)

अधिकांश एप्लिकेशन का उपयोग समाधान 1.

आशा इस मदद करते हैं।

संपादित करें: http प्रमाणीकरण लागू करने के लिए (या तो मूल या पचाने) मेरा सुझाव है अपने आप को देखो:

http://api.rubyonrails.org/classes/ActionController/HttpAuthentication/Basic.html और https://github.com/plataformatec/devise/wiki/How-To:-Use-HTTP-Basic-Authentication

सटीक चरणों होगा अपने रेल सर्वर ढेर पर निर्भर करता है।

संपादित करें 2: मुझे नहीं लगता कि डेविस auth_token प्राप्त करने का एक तरीका प्रदान करता है। मैं तुम्हें कई समाधान की कोशिश कर सकते देख सकते हैं:

  • जब सर्वर में उपयोगकर्ता के लॉग authentication_token प्राप्त करता है और कुकी में कहते हैं। बहुत सुरक्षित नहीं है जब तक कि आप इसे साझा गुप्त कुंजी से एन्क्रिप्ट नहीं करते।

  • आप एक https वेब सेवा प्रदान कर सकते हैं जो आपका आईफोन ऐप उपयोगकर्ता टोकन प्राप्त करने के लिए उपयोग करता है। आपका आईफोन ऐप साइन इन करने के लिए उपयोगकर्ता अनुरोध प्राप्त करने के बाद अनुरोध करेगा।

क्षमा करें मैं कुछ वास्तविक कोड के साथ और अधिक सहायता नहीं कर सकता।

+0

साझा करें, मैं वेब ऐप के लिए एक एसएसएल प्रमाण रखने की योजना बना रहा हूं ताकि सभी डेटा https पर आदान-प्रदान किया जा सके। मैं आईफोन ऐप से किए गए प्रत्येक अनुरोध के लिए auth_token का उपयोग करने की भी योजना बना रहा हूं। लेकिन मैं इस बारे में उलझन में हूं कि मैं वास्तव में पहली बार उपयोगकर्ता नाम और पासवर्ड के साथ वेब ऐप को प्रमाणित करने के लिए आईफोन टुकड़ा कैसे कार्यान्वित करता हूं ताकि मैं बाद के अनुरोधों के लिए ऑटो टोकन प्राप्त कर सकूं। – ed1t

4

यह काफी हद तक निर्भर करता है कि आप सर्वर की तरफ से चीजों को कैसे कार्यान्वित कर रहे हैं, लेकिन हमने इसे मटेटे के तीसरे विकल्प का उपयोग करके कार्यान्वित किया। मेरे पास devise का उपयोग कर रेल 3.1 कार्यान्वयन है। लॉगिन का मार्ग /users/login.json है।सबसे पहले इस तरह के कोड के साथ लॉगिन करने के लिए JSON शरीर का निर्माण:

NSMutableDictionary *loginDictionary = [NSMutableDictionary dictionary]; 
NSMutableDictionary *usernamePasswordDictionary = [NSMutableDictionary dictionary]; 
[usernamePasswordDictionary setObject:username forKey:@"email"]; 
[usernamePasswordDictionary setObject:password forKey:@"password"]; 
[loginDictionary setObject:usernamePasswordDictionary forKey:@"user"]; 

NSData *data = [NSJSONSerialization dataWithJSONObject:loginDictionary options:0 error:&error]; 

जो इस JSON पैदावार:

{"user":{"password":"blahblahblah","email":"[email protected]*****.com"}} 

मैं इस तरह कोड के साथ एक पोस्ट URL अनुरोध भेजने:

NSString *postUrlString = [NSString stringWithFormat:@"%@users/login.json", kServerAPIBaseURL]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:postUrlString] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:kTimeoutInterval]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:@"application/json" forHTTPHeaderField:@"Content-type"]; 
[request setHTTPBody:data]; 

प्रतिक्रिया जो मुझे वापस मिलती है वह JSON है। हम सर्वर साइड कॉन्फ़िगर session_auth_token वापस जाने के लिए:

{ 
    admin = 1; 
    "created_at" = "2012-01-25T00:15:58Z"; 
    "current_sign_in_at" = "2012-04-04T04:29:15Z"; 
    "current_sign_in_ip" = "75.163.148.101"; 
    email = "[email protected]******.com"; 
    "encrypted_password" = "*****"; 
    "failed_attempts" = 0; 
    id = 1; 
    "last_sign_in_at" = "2012-04-03T03:37:18Z"; 
    "last_sign_in_ip" = "75.163.148.101"; 
    "locked_at" = "<null>"; 
    name = "Joe Smith"; 
    "remember_created_at" = "2012-03-29T20:35:43Z"; 
    "reset_password_sent_at" = "<null>"; 
    "reset_password_token" = "<null>"; 
    "session_auth_token" = "3FRgX6CYlzQJGC8tRWwqEjFaMMFKarQAYKTy3u84M0U="; 
    "sign_in_count" = 145; 
    status = 1; 
    "unlock_token" = "<null>"; 
    "updated_at" = "2012-04-04T04:29:15Z"; 
} 

हम जानते हैं कि session_auth_token की दुकान और फिर कुछ इस तरह वापस भेज एक शीर्षक में प्रत्येक अनुरोध के साथ:

NSMutableURLRequest *postRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[self postUrlString]]... 
[postRequest setHTTPMethod:@"POST"]; 
[postRequest setValue:@"application/json" forHTTPHeaderField:@"Content-type"]; 
[postRequest setValue:[self sessionAuth] forHTTPHeaderField:@"X-CSRF-Token"]; 
[postRequest setHTTPBody:data]; 

पैरामीटर [self sessionAuth] शामिल है कि session_auth_token।

मुझे स्पष्टीकरण की आवश्यकता होने पर मुझे बताएं।

संबंधित मुद्दे