

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Validasi klien dan audiens untuk Amazon Cognito
<a name="cognito-validation"></a>

Saat Anda menambahkan sumber identitas ke penyimpanan kebijakan, Izin Terverifikasi memiliki opsi konfigurasi yang memverifikasi bahwa ID dan token akses digunakan sebagaimana dimaksud. Validasi ini terjadi dalam pemrosesan permintaan `IsAuthorizedWithToken` dan `BatchIsAuthorizedWithToken` API. Perilaku berbeda antara ID dan token akses, dan antara Amazon Cognito dan sumber identitas OIDC. Dengan penyedia kumpulan pengguna Amazon Cognito, Izin Terverifikasi dapat memvalidasi ID klien di ID dan token akses. Dengan penyedia OIDC, Izin Terverifikasi dapat memvalidasi ID klien dalam token ID, dan audiens dalam token akses.

*ID klien* adalah pengenal yang terkait dengan instance penyedia identitas yang digunakan aplikasi Anda, misalnya`1example23456789`. *Audiens* adalah jalur URL yang terkait dengan *pihak yang mengandalkan*, atau tujuan, dari token akses, misalnya`https://mytoken.example.com`. Saat menggunakan token akses, `aud` klaim selalu dikaitkan dengan audiens.

Amazon Cognito Token ID memiliki `aud` klaim yang berisi ID [klien aplikasi](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html). Token akses memiliki `client_id` klaim yang juga berisi ID klien aplikasi.

Saat Anda memasukkan satu atau beberapa nilai untuk **validasi aplikasi Klien** di sumber identitas Anda, Izin Terverifikasi membandingkan daftar klien aplikasi ini IDs dengan `aud` klaim token ID atau klaim token akses. `client_id` Izin Terverifikasi tidak memvalidasi URL audiens pihak terkait untuk sumber identitas. Amazon Cognito 

## Otorisasi sisi klien untuk JWTs
<a name="identity-sources-other-idp"></a>

Anda mungkin ingin memproses token web JSON di aplikasi Anda dan meneruskan klaimnya ke Izin Terverifikasi tanpa menggunakan sumber identitas toko kebijakan. Anda dapat mengekstrak atribut entitas Anda dari JSON Web Token (JWT) dan menguraikannya menjadi Izin Terverifikasi.

Contoh ini menunjukkan bagaimana Anda dapat memanggil Izin Terverifikasi dari aplikasi menggunakan JWT.¹

```
async function authorizeUsingJwtToken(jwtToken) {
  
    const payload = await verifier.verify(jwtToken);
   
    let principalEntity = {
        entityType: "PhotoFlash::User", // the application needs to fill in the relevant user type
        entityId: payload["sub"], // the application need to use the claim that represents the user-id
    };
    let resourceEntity = {
        entityType: "PhotoFlash::Photo", //the application needs to fill in the relevant resource type
        entityId: "jane_photo_123.jpg", // the application needs to fill in the relevant resource id
    };
    let action = {
        actionType: "PhotoFlash::Action", //the application needs to fill in the relevant action id
        actionId: "GetPhoto", //the application needs to fill in the relevant action type
    };
    let entities = {
        entityList: [],
    };
    entities.entityList.push(...getUserEntitiesFromToken(payload));
    let policyStoreId = "PSEXAMPLEabcdefg111111"; // set your own policy store id
    
    const authResult = await client
        .isAuthorized({
        policyStoreId: policyStoreId,
        principal: principalEntity,
        resource: resourceEntity,
        action: action,
        entities,
        })
        .promise();
        
    return authResult; 
  
}

function getUserEntitiesFromToken(payload) {
  let attributes = {};
  let claimsNotPassedInEntities = ['aud', 'sub', 'exp', 'jti', 'iss'];
  Object.entries(payload).forEach(([key, value]) => {
    if (claimsNotPassedInEntities.includes(key)) {
        return;
    }
    if (Array.isArray(value)) {
      var attibuteItem = [];
      value.forEach((item) => {
        attibuteItem.push({
          string: item,
        });
      });
      attributes[key] = {
        set: attibuteItem,
      };
    } else if (typeof value === 'string') {
      attributes[key] = {
        string: value,
      } 
    } else if (typeof value === 'bigint' || typeof value ==='number') {
        attributes[key] = {
            long: value,
          } 
    } else if (typeof value === 'boolean') {
        attributes[key] = {
            boolean: value,
       } 
    }

  });

  let entityItem = {
    attributes: attributes,
    identifier: {
      entityType: "PhotoFlash::User",
      entityId: payload["sub"], // the application needs to use the claim that represents the user-id
    }
  };
  return [entityItem];
}
```

¹ Contoh kode ini menggunakan [aws-jwt-verify](https://github.com/awslabs/aws-jwt-verify)pustaka untuk memverifikasi JWTs ditandatangani oleh IdPs OIDC-kompatibel.