

**推出 的新主控台體驗 AWS WAF**

您現在可以使用更新後的體驗，在主控台的任何位置存取 AWS WAF 功能。如需詳細資訊，請參閱[使用 主控台](https://docs.aws.amazon.com/waf/latest/developerguide/working-with-console.html)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# AWS WAF 行動 SDK 的程式碼範例
<a name="waf-mobile-sdk-coding-examples"></a>

本節提供使用行動 SDK 的程式碼範例。

## 初始化權杖提供者並取得權杖
<a name="waf-mobile-sdk-coding-basic"></a>

您可以使用組態物件啟動權杖提供者執行個體。然後，您可以使用可用的操作擷取權杖。以下顯示必要程式碼的基本元件。

------
#### [ iOS ]

```
let url: URL = URL(string: "protection pack (web ACL) integration URL")!
let configuration = WAFConfiguration(applicationIntegrationUrl: url, domainName: "Domain name")
let tokenProvider = WAFTokenProvider(configuration)

//onTokenReady can be add as an observer for UIApplication.willEnterForegroundNotification
self.tokenProvider.onTokenReady() { token, error in
	if let token = token {
	//token available
	}

	if let error = error {
	//error occurred after exhausting all retries
	}
}

//getToken()
let token = tokenProvider.getToken()
```

------
#### [ Android ]

Java 範例：

```
String applicationIntegrationURL = "protection pack (web ACL) integration URL";
//Or
URL applicationIntegrationURL = new URL("protection pack (web ACL) integration URL");

String domainName = "Domain name";

WAFConfiguration configuration = WAFConfiguration.builder().applicationIntegrationURL(applicationIntegrationURL).domainName(domainName).build();
WAFTokenProvider tokenProvider = new WAFTokenProvider(Application context, configuration);

// implement a token result callback
WAFTokenResultCallback callback = (wafToken, error) -> {
	if (wafToken != null) {
	// token available
	} else {  
	// error occurred in token refresh  
	}
};

// Add this callback to application creation or activity creation where token will be used
tokenProvider.onTokenReady(callback);

// Once you have token in token result callback
// if background refresh is enabled you can call getToken() from same tokenprovider object
// if background refresh is disabled you can directly call getToken()(blocking call) for new token
WAFToken token = tokenProvider.getToken();
```

Kotlin 範例：

```
import com.amazonaws.waf.mobilesdk.token.WAFConfiguration
import com.amazonaws.waf.mobilesdk.token.WAFTokenProvider

private lateinit var wafConfiguration: WAFConfiguration
private lateinit var wafTokenProvider: WAFTokenProvider

private val WAF_INTEGRATION_URL = "protection pack (web ACL) integration URL"
private val WAF_DOMAIN_NAME = "Domain name"

fun initWaf() {
	// Initialize the tokenprovider instance
	val applicationIntegrationURL = URL(WAF_INTEGRATION_URL)
	wafConfiguration =
		WAFConfiguration.builder().applicationIntegrationURL(applicationIntegrationURL)
			.domainName(WAF_DOMAIN_NAME).backgroundRefreshEnabled(true).build()
	wafTokenProvider = WAFTokenProvider(getApplication(), wafConfiguration)
	
		// getToken from tokenprovider object
		println("WAF: "+ wafTokenProvider.token.value)
	
		// implement callback for where token will be used
		wafTokenProvider.onTokenReady {
			wafToken, sdkError ->
		run {
			println("WAF Token:" + wafToken.value)
		}
	}
}
```

------

## 允許 SDK 在 HTTP 請求中提供字符 Cookie
<a name="waf-mobile-sdk-coding-auto-token-cookie"></a>

如果 `setTokenCookie`是 `TRUE`，權杖提供者會在 Web 請求中，將權杖 Cookie 包含到 中指定路徑下的所有位置`tokenCookiePath`。根據預設，`setTokenCookie` 為 `TRUE`，而 `tokenCookiePath`為 `/`。

您可以透過指定字符 Cookie 路徑來縮小包含字符 Cookie 的請求範圍，例如 `/web/login`。如果您這樣做，請檢查您的 AWS WAF 規則是否在您傳送至其他路徑的請求中檢查字符。使用`AWSManagedRulesACFPRuleSet`規則群組時，您可以設定帳戶註冊和建立路徑，而規則群組會檢查傳送至這些路徑之請求中的字符。如需詳細資訊，請參閱[將 ACFP 受管規則群組新增至 Web ACL](waf-acfp-rg-using.md)。同樣地，當您使用`AWSManagedRulesATPRuleSet`規則群組時，您可以設定登入路徑，而規則群組會檢查傳送至該路徑之請求中的字符。如需詳細資訊，請參閱[將 ATP 受管規則群組新增至保護套件 (Web ACL)](waf-atp-rg-using.md)。

------
#### [ iOS ]

當 `setTokenCookie`為 時`TRUE`，字符提供者會將 AWS WAF 字符存放在 中，`HTTPCookieStorage.shared`並在對您在 中指定的網域的請求中自動包含 Cookie`WAFConfiguration`。

```
let request = URLRequest(url: URL(string: domainEndpointUrl)!)
//The token cookie is set automatically as cookie header
let task = URLSession.shared.dataTask(with: request) { data, urlResponse, error  in
}.resume()
```

------
#### [ Android ]

當 `setTokenCookie`為 時`TRUE`，字符提供者會將 AWS WAF 字符存放在整個共用應用程式的`CookieHandler`執行個體中。權杖提供者會自動將 Cookie 包含在對您在 中指定之網域的請求中`WAFConfiguration`。

Java 範例：

```
URL url = new URL("Domain name");
//The token cookie is set automatically as cookie header
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.getResponseCode();
```

Kotlin 範例：

```
val url = URL("Domain name")
//The token cookie is set automatically as cookie header
val connection = (url.openConnection() as HttpsURLConnection)
connection.responseCode
```

如果您已初始化`CookieHandler`預設執行個體，字符提供者將使用它來管理 Cookie。如果沒有，字符提供者將使用 AWS WAF 字符初始化新的`CookieManager`執行個體，`CookiePolicy.ACCEPT_ORIGINAL_SERVER`然後將此新執行個體設定為 中的預設執行個體`CookieHandler`。

下列程式碼顯示 SDK 如何在您的應用程式中無法使用 Cookie 管理員和 Cookie 處理常式時初始化 Cookie 管理員和 Cookie 處理常式。

Java 範例：

```
CookieManager cookieManager = (CookieManager) CookieHandler.getDefault();
if (cookieManager == null) {
	// Cookie manager is initialized with CookiePolicy.ACCEPT_ORIGINAL_SERVER
	cookieManager = new CookieManager();
	CookieHandler.setDefault(cookieManager);
}
```

Kotlin 範例：

```
var cookieManager = CookieHandler.getDefault() as? CookieManager
if (cookieManager == null) {
	// Cookie manager is initialized with CookiePolicy.ACCEPT_ORIGINAL_SERVER
	cookieManager = CookieManager()
	CookieHandler.setDefault(cookieManager)
}
```

------

## 在 HTTP 請求中手動提供字符 Cookie
<a name="waf-mobile-sdk-coding-manual-token-cookie"></a>

如果您將 `setTokenCookie`設定為 `FALSE`，則需要在對受保護端點的請求中，以 Cookie HTTP 請求標頭的形式手動提供字符 Cookie。下列程式碼示範如何執行此操作。

------
#### [ iOS ]

```
var request = URLRequest(url: wafProtectedEndpoint)
request.setValue("aws-waf-token=token from token provider", forHTTPHeaderField: "Cookie")
request.httpShouldHandleCookies = true
URLSession.shared.dataTask(with: request) { data, response, error in }
```

------
#### [ Android ]

Java 範例：

```
URL url = new URL("Domain name");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
String wafTokenCookie = "aws-waf-token=token from token provider";
connection.setRequestProperty("Cookie", wafTokenCookie);
connection.getInputStream();
```

Kotlin 範例：

```
val url = URL("Domain name")
val connection = (url.openConnection() as HttpsURLConnection)
val wafTokenCookie = "aws-waf-token=token from token provider"
connection.setRequestProperty("Cookie", wafTokenCookie)
connection.inputStream
```

------