Just a Computer Graphics Studio & My Life

[iOS] Basic Authentication

這次要串接的Web Service是使用Basic Authentication,是我公司資深工程師所用的認證方式,我之前都是取得伺服器回傳的Token來做之後API呼叫的「令牌」。學一下Basic Authentication也不錯啦~

WiKi這麼描述HTTP基本認證

在HTTP中,基本認證(Basic access authentication)是一種用來允許網頁瀏覽器或其他用戶端程式在請求時提供使用者名稱和口令形式的身分憑證的一種登入驗證方式。
在傳送之前是以使用者名稱追加一個冒號然後串接上口令,並將得出的結果字串再用Base64演算法編碼。例如,提供的使用者名稱是Aladdin、口令是open sesame,則拼接後的結果就是Aladdin:open sesame,然後再將其用Base64編碼,得到QWxhZGRpbjpvcGVuIHNlc2FtZQ==。最終將Base64編碼的字串傳送出去,由接收者解碼得到一個由冒號分隔的使用者名稱和口令的字串。
雖然對使用者名稱和口令的Base64演算法編碼結果很難用肉眼識別解碼,但它仍可以極為輕鬆地被電腦所解碼,就像其容易編碼一樣。編碼這一步驟的目的並不是安全與隱私,而是為將使用者名稱和口令中的不相容的字元轉換為均與HTTP協定相容的字元集。

[iOS] Basic Authentication.png

PostMan現在可以幫忙產生code,直接複製貼上就能編譯執行耶~

/**
 Theme: Basic Auth
 IDE: Xcode 8
 Language: Objective C
 Date: 106/10/27
 Author: HappyMan
 Blog: https://cg2010studio.com/
 */
-(void)happyTest
{
    NSDictionary *headers = @{};

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://happystudio/api/token"]
                                                           cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                       timeoutInterval:10.0];
    [request setHTTPMethod:@"GET"];
    [request setAllHTTPHeaderFields:headers];

    // Forming string with credentials 'myusername:mypassword'
    NSString *authStr = [NSString stringWithFormat:@"%@:%@", @"jason.chiu@happystudio.com", @"123456"];
    // Getting data from it
    NSData *authData = [authStr dataUsingEncoding:NSASCIIStringEncoding];
    // Encoding data with base64 and converting back to NSString
    NSString* authStrData = [[NSString alloc] initWithData:[authData base64EncodedDataWithOptions:NSDataBase64EncodingEndLineWithLineFeed] encoding:NSASCIIStringEncoding];
    // Forming Basic Authorization string Header
    NSString *authValue = [NSString stringWithFormat:@"Basic %@", authStrData];
    // Assigning it to request
    [request setValue:authValue forHTTPHeaderField:@"Authorization"];

    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
                                                completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                                    if (error) {
                                                        NSLog(@"error: %@", error);
                                                    } else {
                                                        NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
                                                        NSLog(@"response: %@", httpResponse);
                                                    }
                                                }];
    [dataTask resume];
}

真能順利回傳資料呢!

response: { URL: http://happystudio/api/token } { status code: 200, headers {

    “Content-Length" = 160;

    “Content-Type" = “application/json";

    Date = “Thu, 26 Oct 2017 15:55:46 GMT";

    Server = “Werkzeug/0.12.2 Python/2.7.13″;

} }

參考:NSURLConnection and Basic HTTP Authentication in iOS

廣告

Comments on: "[iOS] Basic Authentication" (1)

  1. […] 其實就是串API時所發現的奇異問題!使用Postman或Chrome呼叫都很成功回傳我要的資料,卻在寫進iOS中卻得到不預期的結果,先前有提到過Basic Authentication,程式傳遞token後,回傳結果表示沒有傳遞token給server,明明就是照先前的code複製貼上修改API Function名稱,這次居然有問題讓我很納悶。 […]

    按讚數

發表留言

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

標籤雲

%d 位部落客按了讚: