你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在 Azure 应用服务身份验证中使用 OAuth 标记
本文介绍如何在使用应用服务中的内置身份验证和授权时使用 OAuth 标记。
检索应用代码中的令牌
在服务器代码中,提供程序特定的令牌将注入到请求标头中,使你可以轻松访问这些令牌。 下表显示了可能的令牌标头名称:
提供程序 | 标头名称 |
---|---|
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
调用可以避免令牌过期。 调用应用服务时,应用服务会自动刷新已经过身份验证用户的令牌存储中的访问令牌。 应用代码发出的后续令牌请求将获取刷新的令牌。 但是,若要正常刷新令牌,令牌存储必须包含提供程序的刷新令牌。 每个提供程序会阐述获取刷新令牌的方式。以下列表提供了简短摘要:
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 应用服务中对用户进行端到端身份验证和授权中了解它的使用方法。 应用服务默认已请求其他范围。 有关这些默认范围的信息,请参阅 OpenID Connect 范围。
配置提供程序以后,即可在令牌存储中找到访问令牌的刷新令牌和过期时间。
若要随时刷新访问令牌,只需以任何语言调用 /.auth/refresh
。 以下代码片段从 JavaScript 客户端使用 jQuery 刷新访问令牌。
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 小时的宽限期。 在此宽限期内,可以使用应用服务刷新会话令牌,而无需重新对用户进行身份验证。 会话令牌失效后,只需调用 /.auth/refresh
,而不需要自行跟踪令牌过期时间。 72 小时的宽限期过后,用户必须重新登录才能获取有效的会话令牌。
如果 72 小时的时间不够,可以延长此过期期限。 大大延长过期时间可能会造成严重的安全风险(例如身份验证令牌泄密或被盗)。 因此,应将宽限期保留为默认 72 小时,或者将延期设为最小值。
若要延长默认的过期期限,请在 Cloud Shell 中运行以下命令。
az webapp auth update --resource-group <group_name> --name <app_name> --token-refresh-extension-hours <hours>
注意
宽限期仅适用于应用服务的已经身份验证的会话,而不适用于来自标识提供者的令牌。 已过期的提供程序令牌没有宽限期。