為伺服器端API產生存取權杖 generating-access-tokens-for-server-side-apis
有些架構仰賴從託管於Adobe Experience Manager基礎結構以外之伺服器上的應用程式呼叫AEM (AEM) as a Cloud Service。 例如,行動應用程式會呼叫伺服器,然後向AEM as a Cloud Service發出API請求。
使用AEM as a Cloud Service Developer Console建立OAuth伺服器對伺服器技術帳戶。 您的應用程式會使用Adobe Identity Management Services (IMS) client_credentials授權,交換其使用者端ID和使用者端密碼以取得存取權杖。 不需要已簽署的JWT、私密金鑰或憑證。
developer.adobe.com/console的Adobe Developer Console不同。 建立並管理AEM Developer Console中說明的技術帳戶。伺服器對伺服器流量 the-server-to-server-flow
如果使用者擁有IMS組織管理員角色,且也是AEM Author上的 AEM使用者 或 AEM管理員 產品設定檔的成員,則可建立技術帳戶。 使用者端密碼在建立時只會顯示給建立該密碼的使用者。 具有AEM as a Cloud Service環境管理員角色的使用者可以檢視帳戶的詳細資料,其中不包含使用者端密碼。
伺服器對伺服器流程涉及以下步驟:
- 建立OAuth伺服器對伺服器技術帳戶並儲存其認證,包括建立時顯示的使用者端密碼。
- 請將憑證安全地儲存在向AEM提出要求的伺服器上。
- 使用使用者端ID、使用者端密碼和範圍向IMS要求存取權杖。
- 設定技術帳戶的產品設定檔和AEM許可權。
- 以存取權杖作為持有人權杖呼叫AEM API。
建立技術帳戶並擷取其認證 fetch-the-aem-as-a-cloud-service-credentials
-
開啟整合。 針對您的應用程式存取的環境開啟AEM Developer Console,然後選取「整合」。 選取建立新的技術帳戶。
-
建立技術帳戶。 在對話方塊中,選取 OAuth伺服器對伺服器(S2S) 做為認證型別,然後選取建立。
-
儲存使用者端密碼。 儲存使用者端密碼對話方塊會顯示認證,包括
technicalAccount.clientSecret。 選取「下載認證」以將認證儲存為aem-s2s-credentials.json,或選取「複製到剪貼簿」。 將認證儲存在機密管理員或應用程式的其他存取控制位置。
選取「「關閉」」。 在 關閉中,若沒有進一步存取您的密碼 確認對話方塊,請選取關閉,但必須先安全地儲存密碼。 對話方塊關閉後,密碼無法再顯示。
-
檢閱技術帳戶。 列出新的OAuth伺服器對伺服器帳戶及其 Active 使用者端密碼。 清單中顯示的密碼ID可識別密碼。 這不是機密值,而且無法在權杖要求中當作
client_secret使用。
若要稍後檢閱密碼的詳細資料,請開啟使用者端密碼的列功能表,然後選取檢視。 憑證對話方塊會顯示IMS端點、範圍、使用者端ID、技術帳戶電子郵件、密碼ID和撤銷狀態。 它不會顯示使用者端密碼值。
在非AEM伺服器上安裝AEM服務認證 install-the-aem-service-credentials-on-a-non-aem-server
讓認證僅供呼叫AEM的伺服器端應用程式使用。 使用秘密管理員或其他存取控制的儲存機制。
請勿在瀏覽器端程式碼、行動應用程式、原始檔控制或記錄檔中放入使用者端密碼。 也將存取權杖視為秘密。
請求OAuth存取權杖 request-an-oauth-access-token
傳送HTTPS POST要求給https://<imsEndpoint>/ims/token/v3。 您的認證JSON中的imsEndpoint是IMS主機名稱。 例如,ims-na1.adobelogin.com使用https://ims-na1.adobelogin.com/ims/token/v3。 使用認證中提供的主機名稱,包括使用階段認證時的階段主機名稱。
使用Content-Type: application/x-www-form-urlencoded並在要求內文中包含這些表單欄位:
grant_typeclient_credentialsclient_idtechnicalAccount.clientId。client_secrettechnicalAccount.clientSecret。scopescopes中的值,以逗號聯結。對每個表單值進行網址編碼。 在要求內文中傳送秘密,而不是在URL或查詢字串中傳送。
回應包括access_token、token_type和expires_in。 使用access_token呼叫AEM。 expires_in值是權杖存留期(以秒為單位)。 請使用該值,而不是假設固定的到期時間。
快取並重複使用存取權杖,直到接近到期日為止,然後使用相同的使用者端憑證請求新的權杖。 此授權不需要JWT交換或重新整理權杖。
Node.js驗證範例 nodejs-authentication-example
如需最小的OAuth伺服器對伺服器實作,請參閱AEM-CS API使用者端程式庫範例。 它使用內建的Node.js API並需要Node.js 18或更新版本,沒有其他相依性。
此範例需要integration物件內的認證。 從AEM Developer Console下載的aem-s2s-credentials.json檔案包含不含此包裝函式的認證。 在將其用於範例(例如jq)之前,請先包裝其內容:
jq '{integration: .}' aem-s2s-credentials.json > downloaded_integration.json
或者,編輯檔案,使其完整內容成為最上層integration欄位的值。 從範例存放庫結帳,執行:
node oauth-s2s-cli.js downloaded_integration.json
若為程式化使用,OAuth協助程式會接受包裝物件為requestAccessToken(credentials)。 它使用integration內的IMS主機名稱、使用者端ID、使用者端密碼和範圍。
將認證檔案設為私人。 CLI會列印存取權杖。 請勿將其輸出傳送至共用記錄檔或予以發佈。 範例的README也說明如何在AEM API請求中使用權杖。
呼叫AEM API calling-the-aem-api
使用值Bearer <access_token>,將存取權杖包含在要求AEM as a Cloud Service環境的Authorization標頭中。
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
"https://author-p<program-id>-e<environment-id>.adobeaemcloud.com/content/dam.json"
使用您的應用程式存取之環境與階層的主機名稱。 僅呼叫技術帳戶有權存取的資源。
在AEM中為技術帳戶使用者設定適當的許可權 set-the-appropriate-permissions-for-the-technical-account-user-in-aem
- 開啟Adobe Admin Console。
- 在 產品和服務 下選取AEM as a Cloud Service。
- 為整合建立產品設定檔,或選取適當的現有設定檔。
- 選取新增使用者,並使用其認證中的
email新增技術帳戶。 - 留出時間讓產品設定檔變更傳播。 使用為技術帳戶產生的存取權杖向AEM進行API呼叫。 產品設定檔會同步為AEM群組,技術帳戶會同步為成員。
- 在適當的AEM作者執行個體上,開啟工具 > 安全性 > 群組。 尋找產品設定檔群組,並確認技術帳戶出現在 成員 下方。 您也可以在工具 > 安全性 > 使用者下檢查其群組成員資格。
- 開啟設定 > 安全性 > 許可權。 選取與產品設定檔對應的群組,並設定API呼叫所需的許可權。
- 針對應用程式存取的每個層驗證所需的API呼叫。 僅授予整合所需的許可權。
如需IMS和AEM使用者和群組的詳細資訊,請參閱IMS支援。
開發人員流程 developer-flow
對於本機測試,開發人員可以直接在AEM Developer Console中產生開發存取權杖,無需建立OAuth伺服器對伺服器技術帳戶。 代號可用來呼叫開發人員可存取的AEM環境。 針對自動伺服器端應用程式,請使用OAuth伺服器對伺服器憑證,而非本機開發權杖。
如需使用AEM Developer Console所需的許可權,請參閱開發人員指南。
產生存取權杖 generating-the-access-token
- 在AEM Developer Console中,移至整合 > 本機權杖。
- 選取取得本機開發權杖。
使用存取權杖呼叫AEM應用程式 call-the-aem-application-with-an-access-token
如呼叫AEM API中所述,使用本機開發存取權杖作為Authorization標頭中的持有人權杖。
對於在本機電腦上執行的AEM專案,不需要IMS存取權杖。
輪換使用者端密碼 refresh-credentials
OAuth伺服器對伺服器憑證不需要每年更新憑證。 定期輪換使用者端密碼,並在密碼公開時進行輪換。 建立新密碼,將您的應用程式切換到該密碼,然後才撤銷舊密碼。
建立和撤銷密碼需要您儲存的密碼值。 AEM Developer Console僅使用輸入的密碼透過IMS驗證請求,不會儲存該請求。
-
建立新密碼。 在 整合 中,開啟OAuth伺服器對伺服器帳戶名稱旁的動作功能表,並選取建立新密碼。 這是帳戶層級功能表,不是使用者端密碼的列功能表。
-
使用使用使用中的密碼進行驗證。 在 建立新密碼 對話方塊中,輸入帳戶的使用中使用者端密碼值,然後選取建立新密碼。
-
儲存新密碼。 對話方塊顯示新密碼一次,包含其
clientId、secretId、clientSecret和scopes。 下載或複製、安全地儲存,並關閉對話方塊。 確認您只想在安全地儲存機密之後才關閉它。 對話方塊關閉後,新密碼無法再顯示。
-
將應用程式切換到新密碼。 以新的
clientSecret取代每個應用程式執行個體和部署所使用的認證中的technicalAccount.clientSecret值。 其他認證值不會變更。使用新密碼請求新的存取權杖並驗證所需的AEM API呼叫,然後再繼續。 應用程式切換期間,這兩個秘密都會保持作用中。 重複使用先前核發的存取權杖無法驗證新密碼。
-
選取要撤銷的舊密碼。 在所有應用程式使用新密碼之後,請開啟舊密碼的列功能表,然後選取撤銷。 檢查密碼ID以確定您已選取舊密碼。
-
確認撤銷。 在 撤銷使用者端密碼 對話方塊中,檢查要撤銷的使用者端密碼識別碼,輸入該密碼的值,然後選取撤銷。 如果您不再擁有機密值,請聯絡Adobe支援。 一旦撤銷透過IMS傳播,應用程式就無法使用該密碼來請求新權杖。 現有的存取權杖可能維持有效。
-
驗證結果。 舊密碼列為已撤銷,而新密碼仍為使用中。
撤銷生效後,請確認舊密碼無法核發新的存取權杖,且新密碼可以核發。 僅檢查顯示的狀態不會驗證IMS傳播。
-
如果不再需要,請移除撤銷的密碼。 若要從清單中移除撤銷的密碼,請開啟其列功能表,選取[刪除],然後確認。
認證撤銷 credentials-revocation
撤銷會停用新Token要求的選取密碼。 它需要撤銷密碼的值。 撤銷可能需要一些時間才能傳播。 請勿假設撤銷機密會立即讓已核發的存取權杖失效。
針對已撤銷密碼的 刪除 會從AEM Developer Console移除其中繼資料,例如密碼識別碼和撤銷狀態。 它不會執行單獨的IMS撤銷,且不適用於作用中密碼。
刪除技術帳戶 delete-a-technical-account
刪除技術帳戶會立即在IMS中撤銷該帳戶及其所有使用者端密碼。 不會為帳戶下的任何認證核發新的存取權杖,而使用它的整合功能在其目前的權杖過期後即會停止運作。 若要還原存取權,您必須建立新的技術帳戶、使用憑證更新您的應用程式,並再次在AEM中指派所需許可權。
無法復原帳戶刪除。 只有在檢查哪些應用程式相依於帳戶後才能確認,且請勿將其用作個人機密輪換步驟。
-
在 整合 中,開啟技術帳戶名稱旁的動作功能表,並選取刪除。
-
檢閱 刪除技術帳戶 對話方塊,然後選取刪除。
移轉JWT型整合 migrate-a-jwt-based-integration
- 在AEM Developer Console中建立新的OAuth伺服器對伺服器技術帳戶。
- 將新的技術帳戶指派給所需的產品設定檔,並設定其AEM許可權。
- 更新伺服器端應用程式以使用
client_credentials來要求權杖,而不是簽署和交換JWT。 - 使用新帳戶驗證新Token的產生和必要的API呼叫。
- 在所有應用程式執行個體使用OAuth伺服器對伺服器後,請淘汰舊的JWT憑證並刪除舊的技術帳戶。
有關舊帳戶上的憑證和私密金鑰作業,請參閱JWT舊版指南。 在驗證取代整合之前,請勿移除舊帳戶。