HTTP Basic Authentication認證方式和AFNetworking的header的設定
第一:什麼是 HTTP Basic Authentication?
HTTP Basic Authentication 是一種用來允許Web瀏覽器或其他客戶端程式在請求時提供以使用者名稱和口令形式的憑證。本人感覺這樣解釋還算滿意。96%的網上解釋是:網路請求是會彈出一個輸入框讓你輸入資訊,然後,伺服器用401狀態拒絕了請求,說明需要使用者提供使用者名稱和密碼的基本身份認證。
第二:HTTP Basic Authentication 詳細介紹。
Authentication( 認證 ) 是最簡單認證方法,這種認證方法被廣泛的使用。通過 HTTP 協議去訪問一個使用 Basic Authentication 保護的資源時,伺服器通常會在
HTTP 請求的 Response 中加入一個"401 需要身份驗證"的 Header,來通知客戶提供使用者憑證後,才能以使用資源。如果正在使用 Internet Explorer 或者 Mozilla Firefox 這樣的視覺化瀏覽器來訪問需要認證的資源,瀏覽器會彈出一個視窗,讓你輸入使用者名稱和密碼,如果所輸入的使用者名稱在資源使用者的驗證列表,並且密碼完全正確,此時,使用者才可以訪問受限的資源。
第三:HTTP Basic Authentication 的流程圖。
第四:例項。
我們按我們一般的情況進行網路請求,返回的結果如下:
如果不明白上面的HTTP Basic Authentication ,這裡無論你怎麼改,是不加引數還是加引數,伺服器給你的返回都是上面的圖的結果。
第五:遇到上面情況的解決方法。
a1.客戶端請求授權詳細說明:介面使用HTTP Basic Authentication認證方式,新增Authorization 到 header, 加密方式 Authorization = Basic Base64.encode(client_key:client_secret);POST請求引數只需grant_type,值為client_credentials
a2.使用者請求授權詳細說明:介面使用HTTP Basic Authentication認證方式,新增Authorization 到 header, 加密方式 Authorization = Basic Base64.encode(client_key:client_secret);POST請求引數需要grant_type,值為password,以及使用者的username和password
第六:例項程式碼演示。+(AYTNetworking*)AYTNetworkingLink:(NSString*)TokenStr{
static AYTNetworking * Net = nil
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// 建立請求物件
Net = [[AYTNetworking alloc]initWithBaseURL:[NSURL URLWithString:AYT_URL]];
AFJSONResponseSerializer * ZSJ_AYT_Response = [AFJSONResponseSerializerserializer];
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
//本部落格的關鍵程式碼
[Net.requestSerializer setValue:TokenStr forHTTPHeaderField:@"authorization"];
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
NSMutableSet * AYT_Set = [NSMutableSet setWithSet:ZSJ_AYT_Response.acceptableContentTypes];
// 新增資料解析型別
[AYT_Set addObject:@"json/html"];
[AYT_Set addObject:@"text/javascript"];
[AYT_Set addObject:@"text/html"];
[AYT_Set addObject:@"application/json"];
[AYT_Set addObject:@"text/plain"];
ZSJ_AYT_Response.acceptableContentTypes = AYT_Set;
ZSJ_AYT_Response.readingOptions = NSJSONReadingMutableContainers;
ZSJ_AYT_Response.removesKeysWithNullValues = YES;
Net.responseSerializer = ZSJ_AYT_Response;
});
return Net;
}
第七:例項的呼叫。(關鍵程式碼)。
NSString * Str = [NSStringstringWithFormat:@"%@:%@",@"ios",@"ios_secret"];
NSData * Data = [Str dataUsingEncoding:NSUTF8StringEncoding];
NSString * Base64 = [Data base64EncodedStringWithOptions:0];
NSString * HJ = [NSString stringWithFormat:@"Basic %@",Base64];
[[AYTNetworkingAYTNetworkingLink:HJ]PostAYTURL:@"/oauth2/accessToken" parameters:@{@"grant_type":@"client_credentials"}success:^(id SuccessResponMessage) {
NSLog(@"12:%@",SuccessResponMessage);
} fail:^(id ErrorResponMessage) {
NSLog(@"12:%@",ErrorResponMessage);
} ];
執行輸出的結果是: