你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure 应用服务中管理 OAuth 令牌

本文介绍如何在 Azure 应用服务中管理用于内置身份验证和授权OAuth 令牌。

检索应用代码中的令牌

Azure 应用服务将提供商特定的令牌注入请求标头,这样您就可以轻松访问它们。 若要获取特定于提供程序的令牌,必须为应用启用 令牌存储

在客户端代码(例如移动应用或浏览器中 JavaScript)中,将 HTTP GET 请求发送到 /.auth/me。 返回的 JSON 包含提供程序特定的令牌。

注意

访问令牌用于访问提供程序资源,因此,仅当使用客户端机密配置了提供程序时,才提供这些令牌。

下表列出了多个应用服务内置提供程序的 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
脸书 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

注意

不同的语言框架可能会以不同格式(例如小写或首字母大写)向应用代码提供这些标头。

刷新身份验证令牌

以下信息指提供者令牌。 有关会话令牌,请参阅 延长会话令牌过期宽限期

如果提供程序的访问令牌过期,则必须重新对用户进行身份验证,然后才能再次使用该令牌。 向应用程序的 /.auth/refresh 终结点发出 GET 调用可以避免令牌过期。

若要随时刷新访问令牌,请以任何语言调用 /.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 响应。 若要诊断错误,请查看应用程序日志了解详细信息。

配置提供程序以提供刷新令牌

若要正常刷新令牌,令牌存储必须包含提供程序的刷新令牌。 每个提供程序都记录了如何获取其刷新令牌。 下表提供了简短摘要:

提供程序 刷新令牌
微软 请按照《配置 Microsoft Entra 提供程序以提供刷新令牌》中的步骤进行操作。
脸书 不提供刷新令牌。 长期令牌在 60 天内过期。 有关详细信息,请参阅 Long-Lived 访问令牌
谷歌 access_type=offline 查询字符串参数追加到 /.auth/login/google API 调用。 有关详细信息,请参阅 Google 刷新令牌
X 访问令牌不会过期。 有关详细信息,请参阅 OAuth 常见问题解答

配置 Microsoft Entra 提供程序以提供刷新令牌

  1. 在 Azure 门户中,转到 API Playground (预览版),并根据需要选择 “新建请求 ”。
  2. 在“在此处输入 ARM 相对路径,包括 API 版本”字段中,输入以下字符串,将占位符替换为订阅 ID、资源组名称和应用名称:
    subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Web/sites/<app-name>/config/authsettingsV2?api-version=2024-11-01
  3. 选择“执行”。
  4. 选择 PUT 左上角,然后选择“ 请求正文 ”选项卡。
  5. GET“响应正文”字段中复制响应内容,并将其粘贴到“请求正文”选项卡中。
  6. 在代码中,找到该"identityProviders":>>"azureActiveDirectory":"login":部分,并添加以下行:
    "loginParameters": ["scope=openid profile email offline_access"]
  7. 选择“执行”。 “响应正文”字段显示所做的更改。

Offline_access 是提供刷新令牌的作用域。 默认情况下,应用服务已请求其他范围。 有关详细信息,请参阅 OpenID Connect 范围Web 应用 - 更新身份验证设置 V2

延长会话令牌过期宽限期

经过身份验证的会话将在 8 小时后过期,随后会保留 72 小时的默认宽限期。 在此宽限期内,可以使用应用服务刷新会话令牌,而无需重新对用户进行身份验证。 当会话令牌失效时,只需调用 /.auth/refresh,这样您就无需自行跟踪令牌的过期时间。

72 小时宽限期失效时,用户必须再次登录才能获取有效的会话令牌。 如果需要比 72 小时更长的过期时段,可以延长到期时间,但如果身份验证令牌泄露或被盗,则延长过期时间可能会产生重大安全影响。 最好将设置保留为默认值 72 小时,或将延长期设置为最小可能值。

若要扩展默认过期窗口,请在 Azure Cloud Shell 中运行以下 Azure CLI 命令:

az webapp auth update --resource-group <group_name> --name <app_name> --token-refresh-extension-hours <hours>

注意

宽限期仅适用于应用服务经过身份验证的会话,不适用于标识提供者的访问令牌。 已过期的提供程序令牌不存在宽限期。