【问题标题】:Azure App using AAD for authentication returns 401 after period of time使用 AAD 进行身份验证的 Azure App 在一段时间后返回 401
【发布时间】:2022-12-17 19:23:27
【问题描述】:
我有一个托管在 Azure 应用服务上的 C# .net 核心 Web 应用。它使用 Azure Active Directory 进行身份验证。
身份验证正在运行 - 当用户访问 Web 应用程序时,他们被要求登录,一旦他们登录,他们就可以成功访问 Web 应用程序。
但是,有时在访问网络应用程序并返回网络应用程序后,他们有时会收到 401 错误。我认为如果用户浏览器在两次访问之间打开了很长时间,这种情况尤其会发生。 Web 应用程序在商业环境中使用,用户通常需要几天时间才能关闭浏览器(在一天结束时,用户通常只会关闭笔记本电脑,而不是将其关闭)。
如果我删除用户 AppServiceAuthSession 会话 cookie,他们可以成功访问 webapp 本身,因此 cookie 似乎可能过期但不会自行刷新。
是否可以采取任何措施来阻止用户收到 401 错误 - 最好是网络应用程序删除并重新创建会话 cookie,并要求用户在需要时再次登录,或者类似的事情。
【问题讨论】:
标签:
c#
azure
authentication
azure-active-directory
azure-web-app-service
【解决方案1】:
当 azure 应用程序服务启用身份提供者以下权限时
默认要求 openid、profile 和 email。
但是,当用户实际批准 offline_access 范围时,您的应用程序可以延长令牌生命周期,因为您的应用程序会收到刷新令牌,并在旧令牌过期时提供新的访问令牌。
因此需要在门户中显式设置 offline_access 范围或
通过资源图中的 authsettingsv2 https://resources.azure.com/ ,subscriptions >your subscription> > resourceGroups > <your resource group name> > providers > Microsoft.Web > sites > <app_name> > config > authsettingsV2..并在范围列表中添加 offline_access 。
identityProviders": {
"azureActiveDirectory": {
"login": {
"loginParameters": ["scope=openid profile email offline_access"]
}
}
}
要刷新访问令牌,请随时在您的应用中调用/.auth/refresh。
当身份验证会话在 ~8 小时后过期时,将有一个长达 72 小时的宽限期来刷新它。所以当令牌无效时调用 /.auth/refresh 这样用户就不需要每次都跟踪,直到 72 小时完成和会话令牌到期。
72 小时后,用户需要再次进行身份验证。
如果需要一些(短值)主要使用 azure cli,甚至可以延长这个宽限期。
请检查这个OAuth tokens in AuthN/AuthZ - Azure App Service | Microsoft Learn
az webapp auth update --resource-group <group_name> --name <app_name> --token-refresh-extension-hours <hours>
我没有扩展值,可以从下面的命令中看到
az webapp auth show --resource-group <group_name> --name <app_name> --token-refresh-extension-hours <hours>