我們app的開發通常有2種認證方式 一種是Basic Auth,一種是OAuth;現在普遍還是使用OAuth的多,而使用Basic Auth認證的少,正好呢我今天給大家介紹的就是使用的比較少的Badic Auth認證方式,這種認證方式開發和調試簡單, 沒有複雜的頁面跳轉邏輯和互動過程,更利於發起方控制。然而缺點就是安全性更低,不過也沒事,我們可以使用https安全加密協議,這樣才更安全。
我使用的是AFNetworking發送的網路請求,因此我們用Basic Auth認證方式就不能再使用AFN的預設的GET或者POST請求,而是自己定義的NSMutableRequest請求,使用AFN發送,如下面代碼:
//http的get請求地址 NSString *urlStr=[NSString stringWithFormat:@"https://192.168.1.157:8443/v1/sms/send/%@",self.username.text]; NSURL *url = [NSURL URLWithString:urlStr]; //自訂的request NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; //請求到期時間 request.timeoutInterval = 10; //get請求 request.HTTPMethod = @"GET"; //配置使用者名稱 密碼 NSString * str = [NSString stringWithFormat:@"%@:%@",@"lairen.com",@"sdclean.com"]; //進行加密 [str base64EncodedString]使用開源Base64.h分類檔案加密 NSString * str2 = [NSString stringWithFormat:@"Basic %@",[str base64EncodedString]]; [request setValue:str2 forHTTPHeaderField:@"Authorization"]; AFHTTPRequestOperation *op=[[AFHTTPRequestOperation alloc]initWithRequest:request]; //設定返回資料為json資料 op.responseSerializer= [AFJSONResponseSerializer serializer]; //發送網路請求 [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"%@",responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"%@",error); }]; //請求完畢回到主線程 [[NSOperationQueue mainQueue] addOperation:op];
使用Basic Auth認證方式,AFN發送網路請求就是上述代碼的格式,其中代碼的一些難懂的點,我在下圖做了注釋;
我注釋的第一個是使用者名稱,第二個是密碼,這個使我們Basic Auth認證方式必須設定的要求標頭,然後第三個呢是我們為了我確保安全把使用者名稱和密碼的字串進行了Base64加密,使用的2個檔案是開源的Base64.h Base64.m 。github上面就可以下載。
上述代碼中的這行是對字串進行的加密,記住是使用的Base64.h分類方法進行的加密,一定要先匯入Base64.h檔案才可以這樣加密。
[str base64EncodedString]
NSString * str2 = [NSString stringWithFormat:@"Basic %@",[str base64EncodedString]];
到這裡我們的Basic Auth認證方式就講完了,怎麼樣,很簡單吧。