在 Azure App Service 驗證中使用 OAuth 權杖
本文說明在 App Service 中使用內建驗證和授權時,如何利用 OAuth 權杖。
在應用程式程式碼中取出權杖
提供者專屬權杖會從伺服器程式碼插入到要求標頭,以供您輕鬆地存取。 下表顯示可能的權杖標頭名稱:
Provider | 標頭名稱 |
---|---|
Microsoft Entra | X-MS-TOKEN-AAD-ID-TOKEN X-MS-TOKEN-AAD-ACCESS-TOKEN X-MS-TOKEN-AAD-EXPIRES-ON X-MS-TOKEN-AAD-REFRESH-TOKEN |
Facebook 權杖 | X-MS-TOKEN-FACEBOOK-ACCESS-TOKEN X-MS-TOKEN-FACEBOOK-EXPIRES-ON |
X-MS-TOKEN-GOOGLE-ID-TOKEN X-MS-TOKEN-GOOGLE-ACCESS-TOKEN X-MS-TOKEN-GOOGLE-EXPIRES-ON X-MS-TOKEN-GOOGLE-REFRESH-TOKEN |
|
X | X-MS-TOKEN-TWITTER-ACCESS-TOKEN X-MS-TOKEN-TWITTER-ACCESS-TOKEN-SECRET |
注意
這些應用程式程式碼的標題可能會因不同的語言架構,而以不同的格式呈現,例如小寫或標題字體。
從用戶端程式碼 (例如行動應用程式或瀏覽器內的 JavaScript) 將 HTTP GET
要求傳送至 /.auth/me
(必須啟用權杖存放區)。 傳回的 JSON 具有提供者專屬權杖。
注意
存取權杖是用於存取提供者資源,因此僅在您使用用戶端密碼設定您的提供者時,這些權杖才會出現。 若要了解如何取得重新整理權杖,請參閱「重新整理存取權杖」。
重新整理驗證權杖
當提供者的存取權杖 (而非工作階段權杖) 到期時,您必須於再次使用該權杖之前重新驗證使用者。 您可以向應用程式的 /.auth/refresh
端點發出 GET
呼叫,以避免權杖到期。 一經呼叫,App Service 就會自動重新整理已驗證使用者在權杖放區中的存取權杖。 您應用程式程式碼的後續權杖要求會取得重新整理過的權杖。 不過,若要進行權杖重新整理,權杖存放區必須包含您提供者的重新整理權杖。 每個提供者會記載其重新整理權杖的取得方法,而下列清單僅為簡短摘要:
Google:將
access_type=offline
查詢字串參數附加至您的/.auth/login/google
API 呼叫。 如需詳細資訊,請參閱 Google 重新整理權杖。Facebook:不提供重新整理權杖。 長時間執行的權杖會在 60 天內到期 (請參閱 Facebook 到期和存取權杖的擴充功能)。
X:存取令牌不會過期(請參閱 OAuth 常見問題)。
Microsoft:在 https://resources.azure.com 中,請執行下列步驟:
在頁面的頂端,選取 [讀取/寫入]。
在左側瀏覽器中,巡覽至 subscriptions><subscription_name>>resourceGroups><resource_group_name>>providers>Microsoft.Web>sites><app_name>>config>authsettingsV2。
按一下 [編輯] 。
修改下列屬性。
"identityProviders": { "azureActiveDirectory": { "login": { "loginParameters": ["scope=openid profile email offline_access"] } } }
按一下 [放置]。
注意
該範圍能讓您重新整理 offline_access 的權杖。 請參閱此教學課程:在 Azure App Service 中端對端驗證和授權使用者如何使用該範圍。 App Service 已預設要求其他範圍。 如需這些預設範圍的資訊,請參閱 OpenID 連線範圍。
設定好提供者之後,您可以在權杖存放區中尋找重新整理權杖和存取權杖的到期時間。
若要隨時重新整理您的存取權杖,只要以任何語言呼叫 /.auth/refresh
。 下列程式碼片段會使用 jQuery 來重新整理 JavaScript 用戶端的存取權杖。
function refreshTokens() {
let refreshUrl = "/.auth/refresh";
$.ajax(refreshUrl) .done(function() {
console.log("Token refresh completed successfully.");
}) .fail(function() {
console.log("Token refresh failed. See application logs for details.");
});
}
如果使用者將授予您應用程式的權限撤銷,您對 /.auth/me
的呼叫可能會失敗,並出現 403 Forbidden
回應。 若要診斷錯誤,請檢查您的應用程式記錄以取得詳細資訊。
延長工作階段權杖到期寬限期
經過驗證的工作階段會在 8 小時後過期。 已驗證的工作階段到期之後,依預設會有 72 小時的寬限期。 在此寬限期內,您可以使用 App Service 重新整理工作階段權杖,而無須重新驗證使用者。 當您的工作階段權杖失效時,您只需要呼叫 /.auth/refresh
,而不必自行追蹤權杖到期日。 一旦 72 小時寬限期結束,用戶必須再次登入,才能取得有效的會話令牌。
如果 72 小時的時間不夠您使用,您可以延長此到期時間範圍。 將到期日延長超過一段很長的期間可能會造成重大的安全性影響 (例如,當驗證權杖外洩或遭竊時)。 因此,請將它保留為預設的 72 小時,或將延長期間設為最小值。
若要延長預設的到期時間範圍,請在 Cloud Shell 中執行下列命令。
az webapp auth update --resource-group <group_name> --name <app_name> --token-refresh-extension-hours <hours>
注意
寬限期僅適用於 App Service 的已驗證工作階段,而不適用於識別提供者的權杖。 已過期的提供者權杖沒有任何寬限期。