

**에 대한 새로운 콘솔 환경 소개 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 요청에서 토큰 쿠키를 제공하도록 허용
<a name="waf-mobile-sdk-coding-auto-token-cookie"></a>

`setTokenCookie`가 `TRUE`이면 토큰 공급자는 `tokenCookiePath`에 지정된 경로 아래의 모든 위치에 대한 웹 요청에 토큰 쿠키를 포함합니다. 기본적으로 `setTokenCookie`는 `TRUE`이고 `tokenCookiePath`은 `/`입니다.

토큰 쿠키 경로를 지정하여 토큰 쿠키가 포함된 요청의 범위를 좁힐 수 있습니다(예: `/web/login`). 이렇게 하면 AWS WAF 규칙이 다른 경로로 보내는 요청의 토큰을 검사하지 않는지 확인합니다. `AWSManagedRulesACFPRuleSet` 규칙 그룹을 사용할 때 계정 등록 및 생성 경로를 구성하면 규칙 그룹이 해당 경로로 전송되는 요청의 토큰을 확인합니다. 자세한 내용은 [ACFP 관리형 규칙 그룹을 웹 ACL에 추가](waf-acfp-rg-using.md) 단원을 참조하십시오. 마찬가지로 `AWSManagedRulesATPRuleSet` 규칙 그룹을 사용할 때 로그인 경로를 구성하면 규칙 그룹이 해당 경로로 전송되는 요청의 토큰을 확인합니다. 자세한 내용은 [ATP 관리형 규칙 그룹을 새 보호 팩(웹 ACL)에 추가](waf-atp-rg-using.md) 단원을 참조하십시오.

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

이 `setTokenCookie`이면 `TRUE`토큰 공급자는 AWS WAF 토큰을에 저장`HTTPCookieStorage.shared`하고에서 지정한 도메인에 대한 요청에 쿠키를 자동으로 포함합니다`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`토큰 공급자는 공유 애플리케이션 전체의 `CookieHandler` 인스턴스에 AWS WAF 토큰을 저장합니다. 토큰 공급자는 `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` 기본 인스턴스를 이미 초기화한 경우 토큰 공급자는 이를 사용하여 쿠키를 관리합니다. 그렇지 않은 경우 토큰 공급자는 AWS WAF 토큰으로 새 `CookieManager` 인스턴스를 초기화`CookiePolicy.ACCEPT_ORIGINAL_SERVER`한 다음이 새 인스턴스를의 기본 인스턴스로 설정합니다`CookieHandler`.

다음 코드는 앱에서 쿠키 관리자 및 쿠키 핸들러를 사용할 수 없을 때 SDK가 쿠키 관리자와 쿠키 핸들러를 초기화하는 방법을 보여줍니다.

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 요청에서 토큰 쿠키를 수동으로 제공
<a name="waf-mobile-sdk-coding-manual-token-cookie"></a>

`setTokenCookie`를 `FALSE`로 설정하면 보호된 엔드포인트에 대한 요청에 토큰 쿠키를 수동으로 쿠키 HTTP 요청 헤더로서 제공해야 합니다. 다음 코드에서는 이를 수행하는 방법을 보여줍니다.

------
#### [ 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
```

------