azure-active-directory - Azure AD / Microsoft Graph 访问级别升级和降级
问题描述
有没有办法升级和降级 Azure AD / Microsoft Graph 访问级别?
例如,用户是否可以仅注册一个 Web 应用程序以登录,然后升级对 One Drive 的访问权限或降级回登录?我正在寻找一种方法来取消授权用户访问,然后使用不同的权限集重新授权,但找不到取消授权的方法。
解决方案
如果您使用 V2 端点,您可以获得增量同意: https ://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-appmodel-v2-overview 。在那里,您可以指定重定向用户登录时需要的范围。
因此,您可以在开始时要求基本功能,然后如果他们想要启用其他功能/您发布需要其他权限的更新,您可以很容易地添加这些功能。
至于另一个方向,没有。一旦用户同意某些权限,撤消同意的唯一方法是删除将oauth2PermissionGrant
用户映射到应用程序服务主体的对象。如果是应用程序权限,则appRoleAssignment
需要从服务主体中删除。
所以这是可能的,但您必须自己调用 Microsoft Graph API。
您可以通过以下方式获得所有权限授予:https://graph.microsoft.com/beta/oauth2PermissionGrants
它会返回如下授予对象:
{
"clientId": "e846195b-9b20-4001-ad84-5ab5de5531e6",
"consentType": "AllPrincipals",
"expiryTime": "2018-05-04T09:39:32.9697945Z",
"id": "WxlG6CCbAUCthFq13lUx5s7PF6398j5LkfWqCoLpQBI",
"principalId": null,
"resourceId": "ad17cfce-f2fd-4b3e-91f5-aa0a82e94012",
"scope": "User.Read Directory.AccessAsUser.All",
"startTime": "0001-01-01T00:00:00Z"
}
这实际上是管理员同意的结果(consentType = AllPrincipals 和 principalId = null)。对于常规用户同意,principalId 将是用户的 id。
clientId
是被授予访问权限的服务主体的 ID,并且resourceId
是目标服务主体。
您还可以将结果过滤到特定用户,例如:https://graph.microsoft.com/beta/oauth2PermissionGrants?$filter=principalId eq '73c38a25-23eb-44eb-bf63-4aa987b2ef19'
然后,您可以通过运行 PATCH 来更新授权以更改批准的范围,https://graph.microsoft.com/beta/oauth2PermissionGrants/WxlG6CCbAUCthFq13lUx5s7PF6398j5LkfWqCoLpQBI
例如:
{
"scope": "User.Read"
}
您可以通过在同一 URL 上运行 DELETE 来完全删除授权。
推荐阅读
- c# - 如何将多个单元格与文本连接起来?
- c# - '无法在 MVC Visual Studio 2017 SignalR 中找到程序集 'System.Diagnostics.DiagnosticSource,版本 = 4.0.2.1
- java - 为什么private修饰符使程序在通过子类对象调用的情况下执行超类中的私有方法?
- excel - xlDialogChartSourceData 的参数是什么?
- javascript - socket.io 连接返回一个空数组。在不重新加载页面的情况下在 React 中接收数据的方法?
- android - 对话框警报单击时应用程序崩溃
- javascript - 如何修复“错误类型错误:data.slice 不是函数”?
- python - 在python中导入网格
- apache-spark - Spark 自定义日志记录
- python-3.x - 为什么我的仪表板应用程序无法正确更新?