

# Okta
<a name="identity-idp-okta"></a>

Okta는 AgentCore Gateway 및 런타임에 액세스하기 위한 자격 증명 공급자 또는 아웃바운드 리소스 액세스를 위한 AgentCore 자격 증명 공급자로 구성할 수 있습니다. 이렇게 하면 에이전트가 Okta를 자격 증명 공급자 및 권한 부여 서버로 사용하여 에이전트 사용자를 인증하고 권한을 부여하거나 에이전트가 Okta에서 승인한 리소스에 액세스하기 위한 자격 증명을 얻을 수 있습니다.

## 인바운드
<a name="identity-idp-okta-inbound"></a>

AgentCore Gateway 및 런타임에 액세스하기 위한 자격 증명 공급자 및 권한 부여 서버로 Okta를 추가하려면 다음을 수행해야 합니다.
+ Okta 테넌트에서 검색 URL을 구성합니다. 이렇게 하면 AgentCore Identity가 OAuth 권한 부여 서버 및 토큰 확인 키와 관련된 메타데이터를 가져올 수 있습니다.
+ 토큰에 유효한 `aud` 클레임을 입력합니다. 이렇게 하면 IdP에서 오는 토큰을 검증하고 예상 클레임이 포함된 토큰에 대한 액세스를 허용할 수 있습니다.

 **인바운드 인증을 위해 Okta를 구성하려면** 

1. Okta 개발자 콘솔을 엽니다.

1. 왼쪽 탐색 모음에서 **애플리케이션을** 선택합니다.

1. **앱 통합 생성(Create App Integration)**을 선택합니다.

1. **OIDC - OpenID Connect**를 애플리케이션의 로그인 방법으로 선택합니다.

1. 애플리케이션 유형으로 **웹** 애플리케이션을 선택합니다.

1. 애플리케이션의 이름을 제공합니다.

1. 필요에 따라 **권한 부여 코드** 및/또는 **클라이언트 자격 증명을** 선택합니다.

1. **로그인 리디렉션 URIs** 경우 Okta 토큰을 수신할 애플리케이션 엔드포인트를 추가합니다.

1. 필요에 따라 **할당** 섹션을 조정합니다.

1. **저장**을 선택합니다.

1. Okta API를 생성하여 애플리케이션을 나타냅니다.
   + 왼쪽 탐색 모음에서 **보안을** 선택합니다.
   + **API**로 이동하여 **권한 부여 서버 추가**를 선택합니다.
   + 흐름에 따라 Okta 테넌트 전용 권한 부여 서버를 생성합니다.
   + 권한 부여 서버가 생성되면 개요 페이지에서 **액세스 정책** 탭을 선택하여 적절한 액세스 정책을 구성합니다.
   + 애플리케이션에 필요한 권한 부여 서버에 필요한 사용자 지정 범위를 정의합니다.

1. Okta 테넌트의 검색 URL을 구성합니다.

   ```
   https://your-tenant.okta.com/oauth2/your-authorization-server
   ```

1. 다음 값을 사용하여 인바운드 인증을 구성합니다.
   +  **검색 URL:** 이전 단계에서 구성된 URL
   +  **허용된 대상:** 11단계에서 API를 생성할 때 제공한 대상 값입니다.

자세한 내용은 [Okta 설명서를 참조하세요](https://developer.okta.com/docs/concepts/oauth-openid/).

### 액세스 토큰 클레임에 client\_id 클레임 추가
<a name="identity-idp-okta-client-id-claim"></a>

Okta는 기본적으로 토큰에 표준 클레임`client_id`으로를 포함하지 않습니다. 토큰에 클레임을 채우려면 토큰을 발급하는 데 사용하는 권한 부여 서버를 통해 클레임을 사용자 지정해야 합니다.

 **액세스 토큰에 client\_id 클레임을 추가하려면** 

1. 왼쪽 탐색 모음에서 **보안**을 선택합니다. **API**로 이동하여 애플리케이션에 사용할 권한 부여 서버를 선택합니다.

1. 권한 부여 서버의 세부 정보 페이지에서 **클레임** 탭을 선택하고 **클레임 추가**를 선택합니다.

1. 새 클레임 **client\_id**의 이름을 지정하고 값을 **app.clientId**로 설정합니다.

1. **토큰 유형에 포함을** **액세스 토큰**으로 설정합니다.

1. **저장**을 선택합니다.

자세한 내용은 [Okta 설명서를 참조하세요](https://developer.okta.com/docs/guides/customize-tokens-returned-from-okta/main/).

## 아웃바운드
<a name="identity-idp-okta-outbound"></a>

**참고**  
AgentCore 자격 증명은 생성한 각 자격 증명 공급자에 대해 고유한 OAuth2 콜백 URL을 발급합니다. 고유한 콜백 URL을 사용하면 세션 바인딩이 가능하여 권한 부여 응답을 시작한 특정 자격 증명 공급자에 대해서만 사용할 수 있도록 하여 교차 공급자 재생 및 CSRF 스타일 공격으로부터 OAuth2 권한 부여 코드 교환을 보호합니다. URL은 공급자별로 고유하므로를 호출할 때까지 URL을 알 **** 수 없습니다`CreateOauth2CredentialProvider`. 먼저 Okta OIDC 애플리케이션을 생성한 다음, AgentCore Identity가 콜백 URL을 발급한 후 Okta 개발자 콘솔로 돌아가 콜백 URL을 등록합니다.

 **1단계: Okta OIDC 애플리케이션 생성** 

[인바운드](#identity-idp-okta-inbound) 섹션의 절차에 따라 Okta OIDC 애플리케이션 및 권한 부여 서버를 생성합니다. 애플리케이션 설정에서 **로그인 리디렉션 URIs**를 입력하라는 메시지가 표시되면 지금은 필드를 비워 둡니다. 3단계에서 고유한 콜백 URL을 추가합니다.

 **2단계: AgentCore 자격 증명 공급자 생성** 

AgentCore 자격 증명에서 Okta를 아웃바운드 리소스 공급자로 구성하려면 다음을 사용합니다.

```
{
  "name": "Okta",
  "credentialProviderVendor": "OktaOauth2",
  "oauth2ProviderConfigInput" : {
    "includedOauth2ProviderConfig": {
      "clientId": "your-client-id",
      "clientSecret": "your-client-secret",
      "authorizationEndpoint": "https://your-tenant.okta.com/oauth2/your-authorization-server/v1/authorize",
      "tokenEndpoint": "https://your-tenant.okta.com/oauth2/your-authorization-server/v1/token",
      "issuer": "https://your-tenant.okta.com/oauth2/your-authorization-server"
    }
  }
}
```

[Okta OAuth 2.0 토큰 교환on-behalf-of ](https://developer.okta.com/docs/guides/set-up-token-exchange/main/)사용하려면 고급 구성에 사용자 지정 공급자를 사용합니다. 자세한 내용은 [ AgentCore 자격 증명과의 토큰 교환On-behalf-of 섹션을 참조하세요](on-behalf-of-token-exchange.md).

```
{
  "name": "Okta",
  "credentialProviderVendor": "CustomOauth2",
  "oauth2ProviderConfigInput": {
    "customOauth2ProviderConfig": {
      "clientAuthenticationMethod": "CLIENT_SECRET_BASIC",
      "clientId": "your-client-id",
      "clientSecret": "your-client-secret",
      "oauthDiscovery": {
        "authorizationServerMetadata": {
          "authorizationEndpoint": "https://your-tenant.okta.com/oauth2/your-authorization-server/v1/authorize",
          "tokenEndpoint": "https://your-tenant.okta.com/oauth2/your-authorization-server/v1/token",
          "issuer": "https://your-tenant.okta.com/oauth2/your-authorization-server"
        }
      },
      "onBehalfOfTokenExchangeConfig": {
        "grantType": "TOKEN_EXCHANGE",
        "tokenExchangeGrantTypeConfig": {
          "actorTokenContent": "NONE"
        }
      }
    }
  }
}
```

[CreateOauth2CredentialProvider](https://docs.aws.amazon.com/bedrock-agentcore-control/latest/APIReference/API_CreateOauth2CredentialProvider.html) 응답에는 `callbackUrl` 필드가 포함됩니다. 이 URL은이 자격 증명 공급자에 고유하며 다음과 같습니다`https://bedrock-agentcore.us-east-1.amazonaws.com/identities/oauth2/callback/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX`. 다음 단계를 위해이 값을 저장합니다.

 **3단계: Okta에 고유한 콜백 URL 등록** 

Okta 개발자 콘솔로 돌아가서 애플리케이션의 **로그인 리디렉션 URIs**에 고유한 콜백 URL을 추가합니다.

1. Okta 개발자 콘솔에 로그인하고 1단계에서 생성한 OIDC 애플리케이션을 엽니다.

1. **일반** 탭을 열고 **LOGIN** 설정을 편집합니다.

1. 에서 반환한 `callbackUrl` 값을 **로그인 리디렉션 URIs**`CreateOauth2CredentialProvider`에 추가합니다.

1. **저장**을 선택합니다.