本文介紹了為您的iOS應用整合WAF App防護SDK(以下簡稱SDK)的操作方法。您必須在應用中整合SDK,才能為應用開啟App防護。
使用限制
iOS應用對應的iOS版本是9.0及以上,否則不支援整合App防護SDK。
前提條件
已開通WAF App防護模組且開啟了App防護狀態開關。
相關操作,請參見如何為應用開啟App防護。
已擷取iOS應用對應的SDK。
您開通WAF App防護模組後,請提交工單,聯絡產品技術專家擷取SDK。
iOS應用對應的SDK分為廣告標識符(Identifier for Advertising,簡稱IDFA)版本和非IDFA版本,對應的SDK檔案分別是:
AliTigerTally_IDFA.framework
AliTigerTally_NOIDFA.framework
如果您的iOS專案中使用了IDFA,推薦您整合AliTigerTally_IDFA版本SDK,否則請使用AliTigerTally_NOIDFA版本SDK。
已擷取SDK認證密鑰(即
appkey
)。您在Web Application Firewall控制台的 頁面開啟App防護後,即可單擊擷取並複製appkey,擷取SDK認證密鑰。該密鑰用於發起SDK初始化請求,需要在整合代碼中使用。
說明每個阿里雲帳號擁有唯一的
appkey
(適用於所有接入WAF防護的網域名稱),且Android和iOS應用整合SDK時都使用該appkey
。認證密鑰樣本:
****OpKLvM6zliu6KopyHIhmneb_****u4ekci2W8i6F9vrgpEezqAzEzj2ANrVUhvAXMwYzgY_****vc51aEQlRovkRoUhRlVsf4IzO9dZp6nN_****Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK****
背景資訊
App防護SDK主要用於對通過App用戶端發起的請求進行簽名。WAF服務端通過校正App請求籤名,識別App業務中的風險、攔截惡意請求,實現App防護的目的。
建立一個測試工程(可選)
您可以直接在真實的iOS工程中整合SDK,或者先建立一個測試工程進行測試,等熟悉操作後,再在真實環境中進行操作。
以Xcode環境為例,建立一個iOS工程,並按照設定精靈完成建立。
本文將測試工程命名為TigerTally_sdk_test,建立好的工程目錄如下圖所示。
操作步驟
使用Xcode開啟App工程,進入檔案目錄。
將SDK複製到專案中。
在專案中添加以下依賴庫。
依賴庫
非IDFA版本是否需要
IDFA版本是否需要
libc++.tbd
是
是
CoreTelephony.framework
是
是
libresolv.9.tbd
是
是
AdSupport.framework
否
是
開啟編譯選項設定(Build Settings),在Other Linker Flags選項中添加-ObjC。
添加整合代碼。
在需要整合SDK的源檔案中,添加標頭檔。
範例程式碼:
Objective-C語言
// 非IDFA版本。 #import <AliTigerTally_NOIDFA/AliTigerTally.h> // IDFA版本。 #import <AliTigerTally_IDFA/AliTigerTally.h>
Swift語言
// 建立標頭檔。 #ifndef TigerTally_sdk_Swift_h #define TigerTally_sdk_Swift_h // 非IDFA版本。 #import <AliTigerTally_NOIDFA/AliTigerTally.h> // IDFA版本。 #import <AliTigerTally_IDFA/AliTigerTally.h> #endif /* TigerTally_sdk_Swift_h */
您需要在編譯選項設定(Build Settings)的Objective-C Bridging Header選項中,添加已建立的標頭檔。
設定使用者標識。
介面定義:
-(void)setAccount:(NSString*)account
功能:設定您業務中自訂的終端使用者標識,方便您更靈活地配置WAF防護策略。
介面參數:<account>,NSString*類型,表示標識一個使用者的字串(建議您使用脫敏後的格式)。
傳回值:無。
範例程式碼:
Objective-C語言
// testAccount表示使用者標識字串樣本。 // 如果當前登入的使用者是遊客身份,可以跳過這步,直接調用初始化函數。 [[AliTigerTally sharedInstance] setAccount:@"testAccount"];
Swift語言
// testAccount表示使用者標識字串樣本。 // 如果當前登入的使用者是遊客身份,可以跳過這步,直接調用初始化函數。 AliTigerTally.sharedInstance().setAccount("testAccount")
添加初始化函數。
介面定義:
-(bool)initialize:(NSString*)appKey
功能:初始化SDK,執行一次初始化採集。一次初始化採集表示採集一次終端裝置資訊,您可以根據業務的不同,重新調用initialize函數進行初始化採集。
介面參數:<appKey>,NSString*類型,設定成您的SDK認證密鑰。
傳回值:bool類型,返回是否初始化成功,true表示成功,false表示失敗。
範例程式碼:
Objective-C語言
NSString *appKey=@"****OpKLvM6zliu6KopyHIhmneb_****u4ekci2W8i6F9vrgpEezqAzEzj2ANrVUhvAXMwYzgY_****vc51aEQlRovkRoUhRlVsf4IzO9dZp6nN_****Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK****"; if([[AliTigerTally sharedInstance]initialize:appKey]){ NSLog(@"初始化成功"); }else{ NSLog(@"初始化失敗"); }
Swift語言
let binit = AliTigerTally.sharedInstance().initialize("****OpKLvM6zliu6KopyHIhmneb_****u4ekci2W8i6F9vrgpEezqAzEzj2ANrVUhvAXMwYzgY_****vc51aEQlRovkRoUhRlVsf4IzO9dZp6nN_****Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK****") if(binit){ NSLog("初始化成功"); }else{ NSLog("初始化失敗"); }
簽章要求資料。
介面定義:
-(NSString*)vmpSign:(NSData*)inputBody
功能:對輸入的資料進行簽名,並且返回簽名串。
介面參數:<inputBody>,NSData*類型,表示待簽名的資料體。
傳回值:
正常返回結果:NSString* 類型,返回簽名串。
異常返回結果:
返回結果
說明
建議操作
you must call initialize
表示您沒有調用
initialize
函數。請先調用
initialize
函數初始化SDK,然後再調用vmpSign
函數。you must input body
表示您沒有設定待簽名的資料體。
您在調用
vmpSign
函數時,必須設定要簽名的資料體(<inputBody>)。NULL
表示初始化未完成,簽名失敗。
建議您重新調用
vmpSign
函數。
範例程式碼:
說明範例程式碼中將簽名串定義為wToken。
Objective-C語言
if(![[AliTigerTally sharedInstance]initialize:@"****OpKLvM6zliu6KopyHIhmneb_****u4ekci2W8i6F9vrgpEezqAzEzj2ANrVUhvAXMwYzgY_****vc51aEQlRovkRoUhRlVsf4IzO9dZp6nN_****Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK****"]) { NSLog(@"初始化失敗"); return; } NSString *signBody =@"hello"; NSString *wToken= [[AliTigerTally sharedInstance] vmpSign:[signBody dataUsingEncoding:NSUTF8StringEncoding]]; NSLog(@"wToken== %@",wToken);
Swift語言
if(!AliTigerTally.sharedInstance().initialize("****OpKLvM6zliu6KopyHIhmneb_****u4ekci2W8i6F9vrgpEezqAzEzj2ANrVUhvAXMwYzgY_****vc51aEQlRovkRoUhRlVsf4IzO9dZp6nN_****Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK****")){ NSLog("初始化失敗"); return } let signBody = "hello" var token = AliTigerTally.sharedInstance().vmpSign(signData) NSLog(token);
將簽名串添加到協議頭,並發送資料到伺服器。
在業務關鍵事件(例如,用戶端登入請求事件)中,將簽名串提交到應用伺服器。WAF服務端在擷取應用伺服器收到的請求後,通過解析簽名串(wToken)進行風險識別、攔截惡意請求,然後將合法請求轉寄回來源站點。
範例程式碼:
Objective-C語言
NSURL * url = [NSURL URLWithString:@"https://xxxxxx/test?id=123"]; NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10]; [request setValue: wToken forHTTPHeaderField: @"wToken"]; request.HTTPMethod=@"post"; request.HTTPBody=[signBody dataUsingEncoding:NSUTF8StringEncoding]; NSURLSessionDataTask *dataTask = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { if(error){ NSLog(@"發送失敗%@", error); }else { NSLog(@"發送成功"); } }]; [dataTask resume];
Swift語言
guard let url = URL(string: "https://xxxxxx/test?id=123") else { return } var request = URLRequest(url: url) request.httpMethod = "POST" request.addValue(token, forHTTPHeaderField: "wToken") let session = URLSession.shared session.dataTask(with: request) { (data, response, error) in if let data = data { do { print("OK") } catch { print("ERROR") print(error) } } }.resume() }