使用API 管理個人存取權杖- Azure DevOps

文章推薦指數: 80 %
投票人數:10人

Azure AD 權杖是比使用pat 更安全的驗證機制。

基於此API 建立和撤銷Pat 的能力,我們想要確保只將這類強大的功能提供給允許的使用者。

Microsoft ... 跳到主要內容 已不再支援此瀏覽器。

請升級至MicrosoftEdge,以利用最新功能、安全性更新和技術支援。

下載MicrosoftEdge 其他資訊 目錄 結束焦點模式 儲存 共用 Twitter LinkedIn Facebook 電子郵件 WeChat 目錄 使用RESTAPI(Pat)管理個人存取權杖 發行項 11/29/2021 此頁面有所助益嗎? 請為您的體驗評分 Yes No 還有其他意見反應嗎? 系統會將意見反應傳送給Microsoft:按下[提交]按鈕,您的意見反應將用來改善Microsoft產品和服務。

隱私權原則。

送出 謝謝。

本文內容 AzureDevOpsServices 當您處理大量的個人存取權杖時(Pat)您擁有的,使用UI單獨管理這些權杖的維護可能會變得很複雜。

管理API的PAT生命週期,您可以使用自動化程式輕鬆地管理與組織相關聯的Pat。

這組豐富的Api可讓您管理您擁有的Pat,讓您能夠建立新的個人存取權杖,並更新或過期現有的個人存取權杖。

在本文中,我們將示範如何設定應用程式,以使用AzureActiveDirectory(AzureAD)權杖來進行驗證,並使用PAT生命週期API進行呼叫。

如果您只想查看可用端點的完整清單,請參閱這裡的API參考。

必要條件 若要使用API,您必須使用AzureADtoken進行驗證。

若要深入瞭解如何執行這項操作,請前往下列驗證一節。

若要這樣做,必須符合一些必要條件: 您必須擁有具有有效Azure訂用帳戶的AzureAD租使用者。

根據租使用者的安全性原則,您的應用程式可能需要獲得存取組織中資源的許可權。

目前,在此租使用者中繼續使用此應用程式的唯一方法,是先要求系統管理員授與許可權給應用程式,您才能使用該應用程式。

使用AzureActiveDirectory(AzureAD)權杖進行驗證 不同于其他AzureDevOpsServicesapi,使用者必須提供AzureAD存取權杖,才能使用此API而非PAT權杖。

AzureAD權杖是比使用pat更安全的驗證機制。

基於此API建立和撤銷Pat的能力,我們想要確保只將這類強大的功能提供給允許的使用者。

Microsoft驗證程式庫(MSAL)包含多個相容的驗證流程,您可以在應用程式內用來取得和重新整理AzureAD權杖。

您可以在Microsoft驗證程式庫的「驗證流程」檔中找到完整的MSAL流程清單。

為您的應用程式選擇正確驗證方法的指南,可以在選擇AzureDevOps的正確驗證方法下找到。

重要 「代理程式」的解決方案(例如「用戶端認證」流程),而且任何未發出AzureAD存取權杖的驗證流程,都不能與此API搭配使用。

如果您的AzureAD租使用者中已啟用多重要素驗證,您絕對必須使用MSAL「授權碼」流程。

若要使用MSAL程式庫來自動取得和重新整理AzureAD存取權杖,您必須: 擁有具有有效Azure訂用帳戶的AzureAD租使用者 在AzureAD租使用者中註冊應用程式 將AzureDevOps許可權新增至應用程式 警告 擁有具有有效Azure訂用帳戶的AzureAD租使用者,是使用此API的必要條件。

一旦您的應用程式具有可處理AzureAD權杖的工作驗證流程,您就可以使用這些權杖來呼叫PAT生命週期管理API。

在下一節中,我們會示範如何建立應用程式,以使用MSAL程式庫來驗證具有AzureAD存取權杖的使用者,並呼叫我們的PAT生命週期管理API。

請遵循兩個範例中的其中一個來開始: 複製我們的範例PythonFlask應用程式,並使用您的租使用者與ADO組織進行設定 在Azure入口網站中為您選擇的語言產生範例應用程式,並針對PAT生命週期進行設定管理API 複製我們的PythonFlaskweb應用程式 我們已為您提供此API的範例PythonFlaskweb應用程式,您可以在GitHub下載該應用程式,並可將其設定為與您的AzureAD租使用者和AzureDevOps組織搭配使用。

範例應用程式會使用MSALauthentication程式碼流程來取得AzureAD存取權杖。

重要 建議您在GitHub上開始使用範例PythonFlaskweb應用程式,但如果您想要使用不同的語言或應用程式類型,請使用[快速入門]選項來重新建立對等的測試應用程式。

複製範例應用程式之後,請遵循存放庫讀我檔案中的指示。

讀我檔案說明如何在您的AzureAD租使用者中註冊應用程式、設定範例以使用您的AzureAD租使用者,以及執行複製的應用程式。

產生快速入門Azure入口網站應用程式 相反地,您可以在Azure入口網站的應用程式頁面上,使用[快速入門]選項,以產生的MSAL程式碼產生範例應用程式。

快速入門測試應用程式會遵循授權碼流程,但會使用MicrosoftGraphAPI端點。

使用者將必須更新應用程式的設定,以指向PAT生命週期管理API的端點。

若要遵循此方法,請在AzureAD開發檔首頁上,依照您選擇的應用程式類型的快速入門指示進行。

我們將逐步解說PythonFlask快速入門應用程式完成此操作的範例。

範例:開始使用PythonFlask快速入門應用程式 當您在具有有效Azure訂用帳戶的AzureAD租使用者中註冊您的應用程式之後,請在Azure入口網站中的AzureActiveDirectory-應用程式註冊下,流覽至您註冊的應用程式。

選取您的應用程式,並流覽至[API許可權]。

選取[新增許可權],然後選取[AzureDevOps檢查user_impersonation-選取[新增許可權]。

從左側導覽面板中選取[快速入門]。

選取您的應用程式類型:針對PythonFlask,選取[Web應用程式]。

選取您的應用程式平臺。

在本教學課程中,請選取[Python]。

確定您已符合必要的必要條件,然後允許Azure入口網站進行必要的變更,以設定您的應用程式。

回復url將是在應用程式建立時設定的重新導向url+"/getAToken"。

下載快速入門應用程式並解壓縮檔案。

安裝應用程式需求,並執行應用程式,以確保您擁有所有必要的相依性。

應用程式一開始會設定為點擊MicrosoftGraphAPI中的端點。

遵循下一節中的設定指示,瞭解如何將此端點變更為PAT生命週期管理API基底端點。

設定快速入門應用程式 當使用者下載並安裝快速入門應用程式之後,它就會設定為使用MicrosoftGraph的測試API端點。

我們必須修改產生的設定檔,讓它改為呼叫PAT生命週期管理API。

提示 在這些檔中,我們會交替使用集合和組織。

如果設定變數需要集合名稱,請將它取代為您的組織名稱。

若要這樣做,我們必須做一些事: 將適用于PAT生命週期管理api的ENDPOINTconfiguration變數更新為 將範圍設定變數更新為"499b84ac-1321-427f-aa17-267ca6975798/.default",以參考AzureDevOps資源及其所有範圍。

下列範例將示範我們如何針對我們在上一節中透過Azure入口網站所產生的快速入門PythonFlask應用程式,進行這項設定。

請務必遵循指示來保護用戶端密碼,這一開始會以純文字的形式插入應用程式佈建檔中。

最佳做法是從設定檔中移除純文字變數,並使用環境變數或AzureKeyVault來保護其應用程式的秘密。

相反地,您可以選擇使用憑證,而不是用戶端密碼。

如果應用程式最終會用於生產環境中,則建議使用[憑證]選項。

您可以在快速入門應用程式設定的最後一個步驟中,找到使用憑證的指示。

警告 請勿在實際執行的應用程式程式碼中留下純文字用戶端密碼。

範例:設定適用于PAT生命週期管理API的PythonFlask快速入門應用程式 當您下載快速入門應用程式、安裝其相依性,並測試它在您的環境中執行之後,請app_config.py在您選擇的編輯器中開啟該檔案。

檔案應該類似下列程式碼片段:為了清楚起見,已移除參考預設MicrosoftGraphAPI設定的批註: importos CLIENT_ID="YOUR_CLIENT_ID_HERE" #Application(client)IDofappregistration CLIENT_SECRET="YOUR_CLIENT_SECRET_HERE" #Placeholder-foruseONLYduringtesting. #Inaproductionapp,werecommendyouuseamoresecuremethodofstoringyoursecret, #likeAzureKeyVault.Or,useanenvironmentvariableasdescribedinFlask'sdocumentation: #https://flask.palletsprojects.com/en/1.1.x/config/#configuring-from-environment-variables #CLIENT_SECRET=os.getenv("CLIENT_SECRET") #ifnotCLIENT_SECRET: #raiseValueError("NeedtodefineCLIENT_SECRETenvironmentvariable") AUTHORITY="https://login.microsoftonline.com/YOUR_AAD_TENANT_ID_HERE"#Formulti-tenantapp #AUTHORITY="https://login.microsoftonline.com/Enter_the_Tenant_Name_Here" REDIRECT_PATH="/getAToken" #UsedforforminganabsoluteURLtoyourredirectURI. #TheabsoluteURLmustmatchtheredirectURIyouset #intheapp'sregistrationintheAzureportal. ENDPOINT='https://graph.microsoft.com/v1.0/users' SCOPE=["User.ReadBasic.All"] SESSION_TYPE="filesystem" #Specifiesthetokencacheshouldbestoredinserver-sidesession 使用應用程式註冊的用戶端識別碼和用戶端密碼,將用戶端識別碼或用戶端密碼更新至您的應用程式。

在生產環境中,請務必使用環境變數、AzureKeyVault或切換至憑證來保護用戶端密碼。

CLIENT_ID="YOUR_CLIENT_ID_HERE" #Application(client)IDofappregistration CLIENT_SECRET="YOUR_CLIENT_SECRET_HERE" #Placeholder-foruseONLYduringtesting. #Inaproductionapp,werecommendyouuseamoresecuremethodofstoringyoursecret. 將ENDPOINT變數變更為您AzureDevOps的集合URL和API端點。

例如,如果是名為"testCollection"的集合,則值會是: #Fillintheurltotheuser'sADOcollection+thePATlifecyclemanagementAPIendpointhere ENDPOINT='https://vssps.dev.azure.com/{YOUR_COLLECTION_NAME_HERE}/_apis/Tokens/Pats?api-version=6.1-preview' 針對名為"testCollection"的集合,此端點會是: ENDPOINT='https://vssps.dev.azure.com/testCollection/_apis/Tokens/Pats?api-version=6.1-preview' 變更SCOPE變數以參考AzureDevOpsapi資源;字元字串是AzureDevOpsapi的資源識別碼,而「預設」範圍則是指該資源識別碼的所有範圍。

SCOPE=["499b84ac-1321-427f-aa17-267ca6975798/.default"] 如果您的應用程式是針對特定的租使用者設定(而不是多租使用者設定),請使用變數的替代值AUTHORITY,在"Enter_the_Tenant_Name_Here"中新增特定的租使用者名稱。

#Forsingle-tenantapp: AUTHORITY="https://login.microsoftonline.com/YOUR_AAD_TENANT_ID_HERE" #Formulti-tenantapp: AUTHORITY="https://login.microsoftonline.com/Enter_the_Tenant_Name_Here" app_config.py使用您的CLIENT_ID、租使用者識別碼和集合URL,確認最終檔案是否符合下列各項。

基於安全性考慮,請確定已將CLIENT_SECRET移至環境變數、AzureKeyVault,或使用您已註冊之應用程式的憑證進行交換: importos CLIENT_ID="YOUR_CLIENT_ID_HERE" #Application(client)IDofappregistration #NotethattheCLIENT_SECREThasbeenremovedandmovedtoanenvironmentvariableorAzureKeyVault AUTHORITY="https://login.microsoftonline.com/YOUR_AAD_TENANT_ID_HERE"#Formulti-tenantapp #AUTHORITY="https://login.microsoftonline.com/Enter_the_Tenant_Name_Here" REDIRECT_PATH="/getAToken" #UsedforforminganabsoluteURLtoyourredirectURI. #TheabsoluteURLmustmatchtheredirectURIyousetintheapp'sregistrationintheAzureportal. ENDPOINT='https://vssps.dev.azure.com/testCollection/_apis/Tokens/Pats?api-version=6.1-preview' #Usedtoconfigureuser'scollectionURLandthedesiredAPIendpoint SCOPE=["499b84ac-1321-427f-aa17-267ca6975798/.default"] #Means"AllscopesfortheAzureDevOpsAPIresource" SESSION_TYPE="filesystem" #Specifiesthetokencacheshouldbestoredinserver-sidesession 重新執行應用程式以測試您是否可以取得要求使用者的所有PAT權杖。

確認您擁有之後,您可以隨意修改的內容'app.py'和'ms-identity-python-webapp-master\templates'目錄,以支援將要求傳送至其他PAT生命週期管理API端點。

如需已修改為支援所有PAT生命週期管理API端點要求的PythonFlask快速入門應用程式範例,請參閱GitHub上的這個範例存放庫。

自動重新整理AzureAD存取權杖 一旦正確設定應用程式,且使用者已取得存取權杖,權杖最多可使用一小時。

上述兩個範例中提供的MSAL程式碼會在權杖到期後自動重新整理。

重新整理權杖可讓使用者不需要再次登入並取得新的授權碼。

不過,使用者在重新整理權杖到期之後,可能需要再次登入90天。

探索PAT生命週期管理API 在上述GitHub範例應用程式和快速入門應用程式中,應用程式已預先設定為使用您取得的AzureAD權杖提出要求。

若要深入瞭解端點、它們接受的參數和回應中傳回的參數,請參閱API參考檔。

常見問題集 問:為什麼需要使用AzureAD權杖進行驗證?為什麼PAT不足? 答:在此PAT生命週期管理API中,我們開啟了建立新Pat和撤銷現有Pat的能力。

在錯誤的手中,惡意執行者可以使用此API,為您組織的ADO資源建立多個進入點。

藉由強制執行AzureADauthentication,我們希望此強大的API更安全,以免遭到未經授權的使用。

問:我是否需要具有有效Azure訂用帳戶的AzureAD租使用者,才能使用此API? 答:可惜的是,此API僅適用于屬於具有有效Azure訂用帳戶之AzureAD租使用者的使用者。

問:我可以針對另一個語言/架構/應用程式類型取得此範例應用程式的範例嗎? 答:我們愛您想要以您選擇的語言來使用API!如果您有範例的要求,請前往我們的開發Community查看是否有其他人有共用的範例。

如果您有想要與較大的AzureDevOps物件分享的範例應用程式,請讓我們知道,我們可以更廣泛地在這些檔上進行迴圈處理! 問:此權杖API和權杖管理API之間有何差異? 答:此權杖API和權杖管理員api在類似的情況下,會提供不同的使用案例和物件: 此權杖API大多適用于想要管理在自動化管線中所擁有之Pat的使用者。

此API允許。

它讓您能夠建立新的權杖,並更新現有的權杖。

權杖管理員API適用于組織系統管理員。

系統管理員可以使用此API來取得和撤銷OAuth授權,其中包括個人存取權杖,(其組織中使用者的Pat)和自我描述會話權杖。

問:如何透過API重新產生/旋轉Pat?我在UI中看到該選項,但是我在API中看不到類似的方法。

答:很好的問題!UI中提供的「重新產生」功能實際上會完成一些動作,這些動作會透過API完全複製。

若要旋轉您的PAT,您需要: 使用GET呼叫瞭解PAT的中繼資料, 使用POST呼叫,以舊的pat中繼資料建立新的pat。

使用DELETE呼叫撤銷舊的PAT 問:當我嘗試繼續使用此應用程式時,我看到「需要系統管理員核准」快顯視窗。

如何在不需要系統管理員核准的情況下使用此應用程式? 答:您的租使用者似乎已設定安全性原則,要求您的應用程式必須授與許可權,才能存取組織中的資源。

目前,在此租使用者中繼續使用此應用程式的唯一方法,是先要求系統管理員授與許可權給應用程式,您才能使用該應用程式。

下一步 瞭解PAT生命週期管理API端點 本文內容



請為這篇文章評分?