azure - 从 .NET Core Web App 中的 Azure AD 撤消访问权限或刷新组和角色
问题描述
我有一个文件>新的 .net 核心 Web 应用程序,它使用 Azure AD 进行身份验证,开箱即用。
我需要创建一些身份验证策略,因此我有以下代码来检查用户声明中的组并设置可以在我的端点上使用的“管理员”策略。
services.AddAuthorization(options =>
{
options.AddPolicy("Admin", policy => policy.RequireClaim("groups", "XXXXX"));
});
这也很好。问题是一旦用户登录,我怎么能: -
- 如果我需要撤销访问权限?(例如,用户被从 AD 中删除或他的访问权限被撤销)
- 刷新身份验证,以便在声明、角色、组等发生任何变化时检测到。
我看了一下https://docs.microsoft.com/en-us/azure/active-directory/enterprise-users/users-revoke-access但它并没有提供太多。它实际上说“只要会话令牌有效,应用程序就可能永远不会将用户发送回 Azure AD。”
如何处理这个问题的最佳方法是什么?
解决方案
总结评论并发布作为答案:
正如我在评论中所说,如果您需要撤销用户的访问权限,那么您可以通过撤销用户刷新令牌来实现。在 Azure 中撤消用户的权限后,撤消刷新令牌并将用户重定向到登录页面。
用户通过身份验证后,将收到访问令牌和刷新令牌。首先,您需要撤销用户的刷新令牌。刷新令牌的生命周期默认为 90 天,因此您需要在其生命周期内撤销它。您可以使用AAD 电源外壳:
Revoke-AzureADUserAllRefreshToken -ObjectId "a1d91a49-70c6-4d1d-a80a-b74c820a9a33"
但据我所知,无法撤销访问令牌。访问令牌的默认过期时间为 1 小时。1 小时后,用户将自动失去对 AAD 的访问权限。如果您想在用户权限被撤销后立即终止用户访问,您可以尝试微软提供的持续访问评估,这有助于确保访问令牌近乎实时地失效。但是,正如文档所说,这可能会导致安全问题,所以我认为这不是最好的方法。
所以我认为最好的方法是:只需撤销刷新令牌,然后等待 1 小时让访问令牌过期,用户将自动失去对 AAD 的访问权限。然后刷新身份验证并将用户重定向到登录页面。
推荐阅读
- python - Selenium for 循环遍历整个网站
- c++ - linux中的UDP sendto会返回ENOBUFS吗?
- angularjs - 更新 intl-tel-input 插件不返回输入值
- python - 如何使用 matplotlib 创建多个饼图
- c - 我怎样才能从这个字符串中得到一个浮点值?C 编程
- r - R循环从FTP中提取CSV文件
- java - 在 Spring Boot 的非 bean 类中使用 @value
- php - 尝试添加用户可以看到的折扣
- python - 从 Android 上传文件时,flask-restful HTTP 500
- android - 如何在 RoomDatabase 中调用反向记录