

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

# 使用 OIDC 身分來源
<a name="identity-sources-oidc"></a>

您也可以將任何合規的 OpenID Connect (OIDC) IdP 設定為政策存放區的身分來源。OIDC 提供者類似於 Amazon Cognito 使用者集區：它們會產生 JWTs作為身分驗證產品。若要新增 OIDC 供應商，您必須提供發行者 URL

新的 OIDC 身分來源需要下列資訊：
+ 發行者 URL。驗證的許可必須能夠在此 URL 探索`.well-known/openid-configuration`端點。
+ 不包含萬用字元的 CNAME 記錄。例如， `a.example.com`無法映射至 `*.example.net`。反之， `*.example.com` 無法映射至 `a.example.net`。
+ 您想要在授權請求中使用的字符類型。在此情況下，您會選擇**身分字符**。
+ 您要與身分來源建立關聯的使用者實體類型，例如 `MyCorp::User`。
+ 您要與身分來源建立關聯的群組實體類型，例如 `MyCorp::UserGroup`。
+ ID 字符範例，或 ID 字符中宣告的定義。
+ 您要套用至使用者和群組實體 IDs字首。在 CLI 和 API 中，您可以選擇此字首。在您使用 **API Gateway 和身分提供者設定**或**引導設定**選項建立的政策存放區中，Verified Permissions 會指派發行者名稱減去 的字首`https://`，例如 `MyCorp::User::"auth.example.com|a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"`。

如需使用 API 操作來授權來自 OIDC 來源請求的詳細資訊，請參閱 [授權可用的 API 操作](authorization.md#authorization-operations)。

以下範例示範如何建立政策，允許會計部門員工存取年底報告、進行機密分類，並且不在衛星辦公室。Verified Permissions 會從委託人的 ID 權杖中的宣告衍生這些屬性。

請注意，在委託人中參考群組時，您必須使用 `in`運算子才能正確評估政策。

```
permit(
     principal in MyCorp::UserGroup::"MyOIDCProvider|Accounting", 
     action, 
     resource in MyCorp::Folder::"YearEnd2024" 
) when { 
     principal.jobClassification == "Confidential" &&
     !(principal.location like "SatelliteOffice*")
};
```

**Topics**
+ [建立 Amazon Verified Permissions OIDC 身分來源](oidc-create.md)
+ [編輯 Amazon Verified Permissions OIDC 身分來源](oidc-edit.md)
+ [將 OIDC 權杖映射至結構描述](oidc-map-token-to-schema.md)
+ [OIDC 提供者的用戶端和對象驗證](oidc-validation.md)

# 建立 Amazon Verified Permissions OIDC 身分來源
<a name="oidc-create"></a>

下列程序會將身分來源新增至現有的政策存放區。

您也可以在 Verified Permissions 主控台中[建立新的政策存放區時建立](policy-stores-create.md)身分來源。在此程序中，您可以將身分來源字符中的宣告自動匯入實體屬性。選擇**引導式設定**或使用 ** API 閘道 和身分提供者設定**選項。這些選項也會建立初始政策。

**注意**  
除非您已建立政策存放區，否則左側導覽窗格中無法使用**身分來源**。您建立的身分來源與目前的政策存放區相關聯。

當您在 中建立具有 [create-identity-source](https://docs.aws.amazon.com/cli/latest/reference/verifiedpermissions/create-identity-source.html) 的身分來源， AWS CLI 或在 Verified Permissions API 中建立 [CreateIdentitySource](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_CreateIdentitySource.html) 時，可以排除委託人實體類型。不過，空白實體類型會建立實體類型為 的身分來源`AWS::Cognito`。此實體名稱與政策存放區結構描述不相容。若要將 Amazon Cognito 身分與您的政策存放區結構描述整合，您必須將委託人實體類型設定為支援的政策存放區實體。

------
#### [ AWS 管理主控台 ]

**建立 OpenID Connect (OIDC) 身分來源**

1. 開啟 [Verified Permissions 主控台](https://console.aws.amazon.com/verifiedpermissions/)。選擇您的政策存放區。

1. 在左側導覽窗格中，選擇**身分來源**。

1. 選擇**建立身分來源**。

1. 選擇**外部 OIDC 提供者**。

1. 在**發行者 URL** 中，輸入 OIDC 發行者的 URL。這是提供服務端點，可提供授權伺服器、簽署金鑰，以及有關提供者的其他資訊，例如 `https://auth.example.com`。您的發行者 URL 必須在 託管 OIDC 探索文件`/.well-known/openid-configuration`。

1. 在**字符類型**中，選擇您希望應用程式提交以進行授權的 OIDC JWT 類型。如需詳細資訊，請參閱[將 OIDC 權杖映射至結構描述](oidc-map-token-to-schema.md)。

1. 在將**字符宣告映射至結構描述實體**中，選擇身分來源**的使用者實體**和**使用者宣告**。**使用者實體**是政策存放區中的實體，您想要從 OIDC 供應商參考使用者。**使用者宣告**通常是來自您的 ID 或存取權杖的 宣告`sub`，其中包含要評估之實體的唯一識別符。來自已連線 OIDC IdP 的身分會映射至選取的委託人類型。

1. （選用） 在將**字符宣告映射至結構描述實體**中，選擇身分來源的**群組實體**和**群組宣告**。**群組實體**是**使用者實體**的[父](https://docs.cedarpolicy.com/overview/terminology.html#term-group)項。群組宣告會映射到此實體。**群組宣告**是一種宣告，通常來自您的 ID 或存取權杖`groups`，其中包含要評估之實體的字串、JSON 或以空格分隔的使用者群組名稱字串。來自已連線 OIDC IdP 的身分會映射至選取的委託人類型。

1. 在**驗證 - 選用**中，輸入您希望政策存放區在授權請求中接受的用戶端 IDs 或對象 URLs，如果有的話。

1. 選擇**建立身分來源**。

1. （選用） 如果您的政策存放區具有結構描述，在您可以參考從 Cedar 政策中的身分或存取權杖擷取的屬性之前，您必須更新結構描述，讓 Cedar 了解您的身分來源建立的主體類型。除了結構描述之外，還必須包含您要在 Cedar 政策中參考的屬性。如需將 OIDC 權杖屬性映射至 Cedar 主體屬性的詳細資訊，請參閱 [將 OIDC 權杖映射至結構描述](oidc-map-token-to-schema.md)。

1. 建立使用字符資訊進行授權決策的政策。如需詳細資訊，請參閱[建立 Amazon Verified Permissions 靜態政策](policies-create.md)。

現在您已建立身分來源、更新結構描述和建立政策，請使用 `IsAuthorizedWithToken`讓 Verified Permissions 進行授權決策。如需詳細資訊，請參閱《*Amazon Verified Permissions API 參考指南*》中的 [IsAuthorizedWithToken](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorizedWithToken.html)。

------
#### [ AWS CLI ]

**建立 OIDC 身分來源**  
您可以使用 [CreateIdentitySource](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_CreateIdentitySource.html) 操作來建立身分來源。下列範例會建立身分來源，從 OIDC 身分提供者 (IdP) 存取已驗證的身分。

1. 建立`config.txt`檔案，其中包含 OIDC IdP 的下列詳細資訊，以供 `create-identity-source`命令的 `--configuration` 參數使用。

   ```
   {
       "openIdConnectConfiguration": {
           "issuer": "https://auth.example.com",
           "tokenSelection": {
                   "identityTokenOnly": {
                           "clientIds":["1example23456789"],
                           "principalIdClaim": "sub"
                   },
           },
           "entityIdPrefix": "MyOIDCProvider",
           "groupConfiguration": {
                 "groupClaim": "groups",
                 "groupEntityType": "MyCorp::UserGroup"
           }
       }
   }
   ```

1. 執行下列命令來建立 OIDC 身分來源。

   ```
   $ aws verifiedpermissions create-identity-source \
       --configuration file://config.txt \
       --principal-entity-type "User" \
       --policy-store-id 123456789012
   {
       "createdDate": "2023-05-19T20:30:28.214829+00:00",
       "identitySourceId": "ISEXAMPLEabcdefg111111",
       "lastUpdatedDate": "2023-05-19T20:30:28.214829+00:00",
       "policyStoreId": "PSEXAMPLEabcdefg111111"
   }
   ```

1. （選用） 如果您的政策存放區具有結構描述，在您可以參考從 Cedar 政策中的身分或存取權杖擷取的屬性之前，您必須更新結構描述，讓 Cedar 了解您的身分來源建立的主體類型。除了結構描述之外，還必須包含您要在 Cedar 政策中參考的屬性。如需將 OIDC 權杖屬性映射至 Cedar 主體屬性的詳細資訊，請參閱 [將 OIDC 權杖映射至結構描述](oidc-map-token-to-schema.md)。

1. 建立使用字符資訊進行授權決策的政策。如需詳細資訊，請參閱[建立 Amazon Verified Permissions 靜態政策](policies-create.md)。

現在您已建立身分來源、更新結構描述和建立政策，請使用 `IsAuthorizedWithToken`讓 Verified Permissions 進行授權決策。如需詳細資訊，請參閱《*Amazon Verified Permissions API 參考指南*》中的 [IsAuthorizedWithToken](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorizedWithToken.html)。

------

# 編輯 Amazon Verified Permissions OIDC 身分來源
<a name="oidc-edit"></a>

您可以在建立身分來源之後編輯其某些參數。您無法變更身分來源的類型，您必須刪除身分來源並建立新的來源，才能從 切換 Amazon Cognito 到 OIDC 或 OIDC Amazon Cognito。如果您的政策存放區結構描述符合身分來源屬性，請注意，您必須分別更新結構描述，以反映您對身分來源所做的變更。

------
#### [ AWS 管理主控台 ]

**更新 OIDC 身分來源**

1. 開啟 [Verified Permissions 主控台](https://console.aws.amazon.com/verifiedpermissions/)。選擇您的政策存放區。

1. 在左側導覽窗格中，選擇**身分來源**。

1. 選擇要編輯的身分來源 ID。

1. 選擇**編輯**。

1. 在 **OIDC 供應商詳細資訊**中，視需要變更**發行者 URL**。

1. 在將**字符宣告對應至結構描述屬性**中，視需要變更使用者和群組宣告與政策存放區實體類型之間的關聯。變更實體類型之後，您必須更新政策和結構描述屬性，才能套用至新的實體類型。

1. 在**對象驗證**中，新增或移除您要強制執行的對象值。

1. 選擇**儲存變更**。

您可以選擇身分來源旁的選項按鈕，然後選擇**刪除身分來源，以刪除身分來源**。在文字方塊`delete`中輸入 ，然後選擇**刪除身分來源**以確認刪除身分來源。

------
#### [ AWS CLI ]

**更新 OIDC 身分來源**  
您可以使用 [UpdateIdentitySource](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_UpdateIdentitySource.html) 操作來更新身分來源。下列範例會將指定的身分來源更新為使用不同的 OIDC 供應商。

1. 建立`config.txt`檔案，其中包含 OIDC IdP 的下列詳細資訊，以供 `update-identity-source`命令的 `--configuration` 參數使用。

   ```
   {
       "openIdConnectConfiguration": {
           "issuer": "https://auth2.example.com",
           "tokenSelection": {
                   "identityTokenOnly": {
                           "clientIds":["2example10111213"],
                           "principalIdClaim": "sub"
                   },
           },
           "entityIdPrefix": "MyOIDCProvider",
           "groupConfiguration": {
                 "groupClaim": "groups",
                 "groupEntityType": "MyCorp::UserGroup"
           }
       }
   }
   ```

1. 執行下列命令來更新 OIDC 身分來源。

   ```
   $ aws verifiedpermissions update-identity-source \
       --update-configuration file://config.txt \
       --policy-store-id 123456789012
   {
       "createdDate": "2023-05-19T20:30:28.214829+00:00",
       "identitySourceId": "ISEXAMPLEabcdefg111111",
       "lastUpdatedDate": "2023-05-19T20:30:28.214829+00:00",
       "policyStoreId": "PSEXAMPLEabcdefg111111"
   }
   ```

**注意**  
如果您變更身分來源的委託人類型，則必須更新結構描述，以正確反映更新的委託人類型。

------

# 將 OIDC 權杖映射至結構描述
<a name="oidc-map-token-to-schema"></a>

您可能會發現想要將身分來源新增至政策存放區，並將提供者宣告或權杖映射到您的政策存放區結構描述。您可以使用[引導式設定](policy-stores-create.md)來建立具有身分來源的政策存放區，或在建立政策存放區後手動更新結構描述，以自動化此程序。將權杖映射到結構描述後，您可以建立參考權杖的政策。

使用者指南的本節包含下列資訊：
+ 何時可以自動將屬性填入政策存放區結構描述
+ 如何手動建置身分來源的結構描述

透過[引導式設定](policy-stores-create.md)建立的具有身分來源的 [API 連結政策存放區](policy-stores-api-userpool.md)和政策存放區，不需要手動將身分 (ID) 字符屬性映射至結構描述。您可以為 Verified Permissions 提供使用者集區中的屬性，並建立填入使用者屬性的結構描述。在 ID 字符授權中，已驗證許可會將宣告對應至委託人實體的屬性。

若要在 Verified Permissions 政策存放區中使用 OIDC 身分提供者 (IdP) 做為身分來源，您必須在結構描述中具有提供者屬性。結構描述是固定的，且必須與提供者權杖在 [IsAuthorizedWithToken](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorizedWithToken.html) 或 [BatchIsAuthorizedWithToken](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_BatchIsAuthorizedWithToken.html) API 請求中建立的實體對應。如果您以從 ID 字符中的提供者資訊自動填入結構描述的方式建立政策存放區，您就可以撰寫政策。如果您建立的政策存放區沒有身分來源的結構描述，則必須將提供者屬性新增至與使用 API 請求建立的實體相符的結構描述。然後，您可以使用提供者字符中的屬性來撰寫政策。

**Topics**
+ [將 ID 字符映射至結構描述](#oidc-map-id-token)
+ [映射存取權杖](#oidc-map-access-token)
+ [結構描述映射的須知事項](#oidc-map-token-to-schema-things-to-know)

## 將 ID 字符映射至結構描述
<a name="oidc-map-id-token"></a>

Verified Permissions 會將 ID 字符宣告視為使用者的屬性：其名稱和標題、群組成員資格、其聯絡資訊。ID 字符在*屬性型存取控制* (ABAC) 授權模型中最有用。當您希望 Verified Permissions 根據提出請求的人員分析對資源的存取時，請選擇身分來源的 ID 字符。

從 OIDC 供應商使用 ID 字符與使用 Amazon Cognito ID 字符大致相同。差異在於宣告。您的 IdP 可能會顯示[標準 OIDC 屬性](https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims)，或具有自訂結構描述。在 Verified Permissions 主控台中建立新的政策存放區時，您可以使用範例 ID 字符新增 OIDC 身分來源，也可以手動將字符宣告對應至使用者屬性。由於 Verified Permissions 不知道 IdP 的屬性結構描述，因此您必須提供此資訊。

如需詳細資訊，請參閱[建立已驗證許可政策存放區](policy-stores-create.md)。

以下是具有 OIDC 身分來源之政策存放區的範例結構描述。

```
"User": {
   "shape": {
      "type": "Record",
      "attributes": {
         "email": {
            "type": "String"
         },
         "email_verified": {
            "type": "Boolean"
         },
         "name": {
            "type": "String",
            "required": true
         },
         "phone_number": {
            "type": "String"
         },
         "phone_number_verified": {
            "type": "Boolean"
         }
      }
   }
}
```

如需將對此結構描述進行驗證的範例政策，請參閱 [反映 OIDC ID 字符屬性](policies-examples.md#policies-examples-oidc-id)。

## 映射存取權杖
<a name="oidc-map-access-token"></a>

Verified Permissions 會處理存取金鑰宣告，而不是群組宣告為 動作的屬性或*內容屬性*。除了群組成員資格之外，來自 IdP 的存取權杖可能包含 API 存取的相關資訊。存取權杖適用於使用角色型存取控制 (RBAC) 的授權模型。依賴群組成員資格以外的存取字符宣告的授權模型需要額外的結構描述組態工作。

來自外部 OIDC 提供者的大多數存取字符都與 Amazon Cognito 存取字符緊密一致。當傳遞至 Verified Permissions 時，OIDC 存取權杖會映射至內容物件。您可以使用 參考存取字符的屬性`context.token.attribute_name`。下列範例 OIDC 存取權杖包含範例基本宣告。

```
{
    "sub": "91eb4550-9091-708c-a7a6-9758ef8b6b1e",
    "groups": [
        "Store-Owner-Role",
        "Customer"
    ],
    "iss": "https://auth.example.com",
    "client_id": "1example23456789",
    "aud": "https://myapplication.example.com"
    "scope": "MyAPI-Read",
    "exp": 1688096566,
    "iat": 1688092966,
    "jti": "a1b2c3d4-e5f6-a1b2-c3d4-TOKEN2222222",
    "username": "alice"
}
```

下列範例顯示如何反映 Verified Permissions 結構描述中存取字符範例的屬性。如需編輯結構描述的詳細資訊，請參閱 [編輯政策存放區結構描述](schema-edit.md)。

```
{
   "MyApplication": {
      "actions": {
         "Read": {
            "appliesTo": {
               "context": {
                  "type": "ReusedContext"
               },
               "resourceTypes": [
                  "Application"
               ],
               "principalTypes": [
                  "User"
               ]
            }
         }
      },
      ...
      ...
      "commonTypes": {
         "ReusedContext": {
            "attributes": {
               "token": {
                  "type": "Record",
                  "attributes": {
                     "scope": {
                        "type": "Set",
                        "element": {
                           "type": "String"
                        }
                     },
                     "client_id": {
                        "type": "String"
                     }
                  }
               }
            },
            "type": "Record"
         }
      }
   }
}
```

如需將對此結構描述進行驗證的範例政策，請參閱 [反映 OIDC 存取權杖屬性](policies-examples.md#policies-examples-oidc-access)。

## 結構描述映射的須知事項
<a name="oidc-map-token-to-schema-things-to-know"></a>

**屬性映射在字符類型之間有所不同**  
在存取權杖授權中，已驗證許可會將宣告對應至[內容](context.md)。在 ID 字符授權中，已驗證許可會將宣告對應至主體屬性。對於您在 Verified Permissions 主控台中建立的政策存放區，只有**空白**和**範例**政策存放區會讓您沒有身分來源，並要求您將 ID 字符授權的使用者集區屬性填入您的結構描述。存取權杖授權是以具有群組成員宣告的角色型存取控制 (RBAC) 為基礎，不會自動將其他宣告映射至政策存放區結構描述。

**不需要身分來源屬性**  
當您在 Verified Permissions 主控台中建立身分來源時，不會將任何屬性標記為必要。這可防止遺失宣告導致授權請求中的驗證錯誤。您可以視需要將屬性設定為必要，但這些屬性必須存在於所有授權請求中。

**RBAC 不需要結構描述中的屬性**  
身分來源的結構描述取決於您在新增身分來源時建立的實體關聯。身分來源會將一個宣告映射至使用者實體類型，並將一個宣告映射至群組實體類型。這些實體映射是身分來源組態的核心。透過此最低資訊，您可以在角色型存取控制 (RBAC) 模型中撰寫政策，為使用者可能所屬的特定使用者和特定群組執行授權動作。在結構描述中新增權杖宣告可延長政策存放區的授權範圍。來自 ID 權杖的使用者屬性具有可促成屬性型存取控制 (ABAC) 授權的使用者相關資訊。存取字符的內容屬性具有 OAuth 2.0 範圍等資訊，可以提供來自提供者的其他存取控制資訊，但需要額外的結構描述修改。

Verified Permissions 主控台中的**使用 API Gateway 和身分提供者設定**和**引導設定**選項會將 ID 字符宣告指派給結構描述。存取字符宣告的情況並非如此。若要將非群組存取字符宣告新增至您的結構描述，您必須在 JSON 模式中編輯結構描述，並新增 [commonTypes](https://docs.cedarpolicy.com/schema/json-schema.html#schema-commonTypes) 屬性。如需詳細資訊，請參閱[映射存取權杖](#oidc-map-access-token)。

**OIDC 群組宣告支援多種格式**  
當您新增 OIDC 提供者時，您可以在 ID 或存取權杖中選擇要映射到政策存放區中使用者群組成員資格的群組宣告名稱。驗證的許可會以下列格式辨識群組宣告：

1. 不含空格的字串： `"groups": "MyGroup"`

1. 以空格分隔的清單：`"groups": "MyGroup1 MyGroup2 MyGroup3"`。每個字串都是一個群組。

1. JSON （逗號分隔） 清單： `"groups": ["MyGroup1", "MyGroup2", "MyGroup3"]`

**注意**  
Verified Permissions 會將空格分隔群組中的每個字串宣告解譯為個別群組。若要將具有空格字元的群組名稱解譯為單一群組，請取代或移除宣告中的空格。例如，格式化`My Group`名為 的群組`MyGroup`。

**選擇字符類型**  
政策存放區與身分來源搭配使用的方式取決於身分來源組態中的金鑰決策：您是否將處理 ID 或存取權杖。使用 OIDC 供應商時，您必須在新增身分來源時選擇字符類型。您可以選擇 ID 或存取權杖，而且您選擇的權杖類型不會在政策存放區中處理。特別是如果您希望從 ID 字符宣告自動映射到 Verified Permissions 主控台中的屬性中受益，請在建立身分來源之前提早決定要處理的字符類型。變更字符類型需要大量精力來重構您的政策和結構描述。下列主題說明搭配政策存放區使用 ID 和存取權杖。

**Cedar 剖析器需要某些字元的括號**  
政策通常會參考 等格式的結構描述屬性`principal.username`。如果大多數出現在字符宣告名稱`/`中的非英數字元，例如 `.`、 `:`或 ，Verified Permissions 無法剖析 `principal.cognito:username`或 等條件值`context.ip-address`。您必須改為使用括號表示法來格式化這些條件`context["ip-address"]`，格式分別為 `principal["cognito:username"]`或 。底線字元`_`是宣告名稱中的有效字元，也是此要求的唯一非英數字元例外狀況。

此類型主體屬性的部分範例結構描述如下所示：

```
"User": {
   "shape": {
      "type": "Record",
      "attributes": {
         "cognito:username": {
            "type": "String",
            "required": true
         },
         "custom:employmentStoreCode": {
            "type": "String",
            "required": true,
         },
         "email": {
            "type": "String",
            "required": false
         }
      }
   }
}
```

此類型內容屬性的部分範例結構描述如下所示：

```
"GetOrder": {
   "memberOf": [],
   "appliesTo": {
      "resourceTypes": [
         "Order"
      ],
      "context": {
         "type": "Record",
         "attributes": {
            "ip-address": {
               "required": false,
               "type": "String"
            }
		 }
	  },
      "principalTypes": [
         "User"
      ]
   }
}
```

如需將對此結構描述進行驗證的範例政策，請參閱 [使用括號表示法來參考字符屬性](policies-examples.md#policies-examples-brackets)。

# OIDC 提供者的用戶端和對象驗證
<a name="oidc-validation"></a>

當您將身分來源新增至政策存放區時，Verified Permissions 具有組態選項，可驗證 ID 和存取權杖是否如預期般使用。此驗證會在處理 `IsAuthorizedWithToken`和 `BatchIsAuthorizedWithToken` API 請求時發生。ID 和存取字符，以及 Amazon Cognito 和 OIDC 身分來源的行為有所不同。使用 Amazon Cognito 使用者集區提供者，Verified Permissions 可以驗證 ID 和存取權杖中的用戶端 ID。透過 OIDC 供應商，Verified Permissions 可以驗證 ID 字符中的用戶端 ID，以及存取字符中的對象。

*用戶端 ID* 是與您應用程式使用的身分提供者執行個體相關聯的識別符，例如 `1example23456789`。*對象*是與存取字符的預期*依賴方*或目的地相關聯的 URL 路徑，例如 `https://mytoken.example.com`。使用存取權杖時，`aud`宣告一律會與對象建立關聯。

OIDC ID 字符具有包含用戶端 IDs 的`aud`宣告，例如 `1example23456789`。

OIDC 存取字符具有包含字符受眾 URL 的`aud`宣告，例如 `https://myapplication.example.com`，以及包含用戶端 IDs的`client_id`宣告，例如 `1example23456789`。

設定您的政策存放區時，請輸入一或多個值來驗證**您的政策存放區所使用的對象驗證**權杖的對象。
+ **ID 字符** – Verified Permissions 透過檢查`aud`宣告中至少有一個用戶端 IDs成員符合對象驗證值來驗證用戶端 ID。
+ **存取權杖** – Verified Permissions 透過檢查`aud`宣告中的 URL 是否符合對象驗證值來驗證對象。如果沒有`aud`宣告，可以使用 `cid`或 `client_id`宣告來驗證對象。請洽詢您的身分提供者，了解正確的受眾聲明和格式。

## JWTs的用戶端授權
<a name="oidc-validation-other-idp"></a>

您可能想要在應用程式中處理 JSON Web 權杖，並在不使用政策存放區身分來源的情況下將其宣告傳遞給 Verified Permissions。您可以從 JSON Web Token (JWT) 擷取實體屬性，並將其剖析為驗證許可。

此範例示範如何使用 JWT.1 從應用程式呼叫 Verified Permissions。

```
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];
}
```

1 此程式碼範例使用 [aws-jwt-verify](https://github.com/awslabs/aws-jwt-verify) 程式庫來驗證由 OIDC 相容 IdPs JWTs。