簡介
大多數的布賴特灣 REST API 都使用 OAuth2 作為身份驗證的基礎,我們將在接下來的章節中更詳細地查看 OAuth 實現。
但是,首先請注意,兩個API使用不同的身份驗證方法:
原則金鑰驗證:播放API
播放 API 主要用於從播放器或門戶網站檢索視頻和播放列表數據,使用policy_key
,進行身份驗證,通常作為Accept
標題中的參數傳遞:
Accept: application/json;pk={policy_key}
API 金鑰驗證:實時API
Live API會使用當您設定帳戶以驗證要求時所提供的 API 金鑰。API 密鑰傳遞在X-API-KEY
標題中:
X-API-KEY : {YOUR_APIKey}
驗證
視頻雲的其他 REST API 使用 OAuth2 進行身份驗證,對於熟悉 OAuth2 的人,我們使用客戶端憑證流程。涉及兩項作業:
- 獲取客戶端憑據:這是一次性操作,使用 Studio 中管理工具的 API 身份驗證頁面最容易執行。看管理 API 身份驗證憑據有關詳細信息和分步說明。
- 獲取訪問令牌:每個 API 請求必須包含在
Authorization
標題中發送的訪問令牌:Authorization: Bearer {access_token}
訪問令牌活動五分鐘,所以除非您運行將生成重複 API 請求的進程,否則您可能只想為每個請求獲取一個新的進程。
訪問令牌是通過發送客戶端憑據在請求到布賴特灣的 OAuth API 獲得的。請參閱獲取訪問令牌以獲取完整詳細信還有一個示例應用程序您可以使用它來獲得用於測試 API 調用的一次性令牌。還有用於配置流行的 REST 客戶郵遞員和失眠的說明。
通過OAuth API的客戶端憑據
如果您希望或需要使用OAuth API創建客戶端憑據,則以下步驟將指導您獲取客戶端憑據。首先,您需要獲取BC_TOKEN,該證書用於對您的客戶端憑據請求進行身份驗證。
獲取您的BC_TOKEN
和帳戶號碼
您將需要登錄到工作室才能獲得您的BC_TOKEN
.
- 像平常一樣登錄到工作室。
- 您需要您的帳號(在Studio中稱為發布商ID),您可以通過在Studio中轉到您的帳戶信息來獲得:
- 隨著 Studio 中的任何頁面打開,打開瀏覽器的開發人員工具,轉到控制台,並粘貼以下代碼:
var cookiesArray = document.cookie.split(";"), cookiesObj = {}, i, tmpArray = []; for (i = 0; i < cookiesArray.length; i++) { tmpArray = cookiesArray[i].split("="); if (tmpArray[0].indexOf('BC_TOKEN') > -1) { cookiesObj.BC_TOKEN = tmpArray[1]; } } window.prompt("BC_TOKEN:", cookiesObj.BC_TOKEN);
...然後按回車鍵。
- 您應該會看到一個提示,其中包含您的
BC_TOKEN
: - 如果您有 BC_TOKEN,請轉到「獲取客戶端憑據」部分; 如果由於某種原因您沒有使用前面的步驟獲取 BC_TOKEN,請轉到控制台
document.cookie
,鍵入並按回車鍵。 - 該頁面的所有 cookie 將以分號分隔的列表返回。找到列表中的 BC_TOKEN cookie,並複製值:
取得client_credentials
現在我們已經準備好調用 OAuth 服務來檢索客戶端憑據。我們必須指定我們要為其請求憑據的客戶端應用程序名稱-名稱是任意的,旨在幫助您跟踪憑據的用途-在這裡,我們將僅使用“ ingest-profiles-api-client”。我們還必須在數組中指定要訪問的操作的範圍,在這裡我們將使用它。可用的作業會顯示在用戶端認證要求的 API 作業中。在以下步驟中,您將指定Ingest Profiles API所需的操作。
- 編輯以下 curl 命令,然後將其粘貼到命令行中,然後按 Return 鍵。您必須提供下列三個值的特定值:
- 您的 BC_ 令牌
- 您的認證名稱
- 您的帳戶 ID
curl \ --include \ --header "Authorization: BC_TOKEN your_BC_TOKEN" \ --data 'name=ingest-profiles-api-client&maximum_scope=[{ "identity": { "type": "video-cloud-account", "account-id": your_account_id }, "operations": [ "video-cloud/ingest-profiles/profile/read", "video-cloud/ingest-profiles/profile/write", "video-cloud/ingest-profiles/account/read", "video-cloud/ingest-profiles/account/write" ] }]' \ https://oauth.brightcove.com/v4/client_credentials
- 響應應該如下所示(格式添加):
{ "redirect_url": null, "maximum_scope": [ { "identity": { "type": "video-cloud-account", "account-id": your_video_cloud_account_id }, "operations": [ "video-cloud/ingest-profiles/profile/write", "video-cloud/ingest-profiles/account/write", "video-cloud/ingest-profiles/profile/read", "video-cloud/ingest-profiles/account/read" ] } ], "name_html": "ingest-profiles-api-client", "issued_to": "your_email@host.com", "trusted": null, "expires_at": null, "issued_at": "2015-06-01T15:09:00Z", "name": "ingest-profiles-api-client", "description_html": null, "revoked": null, "type": "credential", "client_secret": "Ifckr6cWtxOh_NZnEVhKCgcqZaqoMcPuoJ-VGuivIE_psPoPUt2hGqUK15uPON3x3m748ElazZoOKPxbI3-4nQ", "description": null, "client_id": "da270d86-f3cd-4ee6-85b0-047df97a0db2", "issued_user": your_video_cloud_account_id }
- 複製並保存
client_id
和client_secret
,因為您將需要這些隨時隨地獲得access_token
.
通過OAuth API訪問令牌
訪問令牌與客戶端憑據不同,它是短暫的-當前它們在5分鐘內過期。您需要為每個API請求獲取一個新的API。您當然可以在應用程序中構建邏輯,以檢查最新的訪問令牌以查看其是否超時,但是對Ingest Profiles API的請求可能很少且相差甚遠,因此沒有充分的理由這樣做。
實際上,該API可能是您不常使用的API,因此根本不值得圍繞它構建應用程序。另一種方法是使用 Brightcove 學習服務構建的這個 shell 腳本。它允許您輸入客戶端ID和密碼,API請求和方法以及任何請求數據。然後它得到一個access_token
,發出 API 請求,並輸出響應。(請注意,外殼腳本使用捲曲,這是在 Mac MacOS 和其他 Unix/Linux 系統上本地安裝,或者可以安裝在視窗上。
要檢索訪問令牌,您可以發出POST請求:
https://oauth.brightcove.com/v4/access_token
您必須通過此調用傳遞以下標題:
Content-Type: application/x-www-form-urlencoded
Authorization: Basic {client_id}:{client_secret}
整個{client_id}:{client_secret}
字符串必須是 Base64 編碼(如果您將其作為--user
憑據傳遞,curl 將自動對字符串進行 Base64 編碼; 在其他語言中,您需要自己處理 Base64 編碼)。
您也必須傳送下列索引鍵/值組做為要求主體或 URL 參數:
grant_type=client_credentials
響應將如下所示(為了可讀性,在這裡打印漂亮):
{
"access_token": "ANB7xKhiUZmwltVd3f1odcHHM9VAwg02kwmLwtZwHv3SxGCOWLUf5W4G7X22PRjmR9StvFUqzpVZ1suOfyfOigdi-rnohxyEaSSuZceeLw_9OBW7fXldOG05HEgkeK3N-DBZZZyilodmjA1JWZHbgI3IU7Rmz5IPGyi-sDxHN3KlOr1BDZlLZpXPdFPwEyb6idq-z8AL-blKTSMtNI3_fz3oNBisfrHGUv5tXHoQT4B7FYcvdrap16gTOO7_wNt1zmgLJiUHvyxZgsgBchm_AhohVL-AYgcfCbCR0v7d2hgI4ag35pnZNeujDiBLfnCFcVMlqQGq8UEVZrmU9a8y4pVAGih_EImmghqmSrkxLPYZ800-vIWX-lw",
"token_type": "Bearer",
"expires_in": 300
}
該access_token
值是您必須以此形式在 API 調用中傳入Authorization
標題的值:
Authorization: Bearer {access_token}
該expired_in
值是訪問令牌有效期的秒數。
如需詳細資訊和範例程式碼,請參閱取得存取權杖