Azure 已吊销应用程序的目录权限,但Graph API仍读取数据

Azure 已吊销应用程序的目录权限,但Graph API仍读取数据,azure,azure-ad-graph-api,Azure,Azure Ad Graph Api,一年多前,我在Azure Active Directory中定义了一个应用程序,当时,我一直在使用所需的权限,直到一切正常为止 从那时起直到几分钟前,该应用程序在“WindowsAzure Active Directory”上有两个权限:“读取目录数据”和“登录并读取用户配置文件” 但后来我撤销了它们并单击“保存”: 我给AAD几分钟的时间进行同步,然后用该应用程序的ClientID和Key以及相应的TenantID再次登录Graph API,但我发现我仍然可以读取目录数据 最初,我在另一

一年多前,我在Azure Active Directory中定义了一个应用程序,当时,我一直在使用所需的权限,直到一切正常为止

从那时起直到几分钟前,该应用程序在“WindowsAzure Active Directory”上有两个权限:“读取目录数据”和“登录并读取用户配置文件”

但后来我撤销了它们并单击“保存”:

我给AAD几分钟的时间进行同步,然后用该应用程序的ClientID和Key以及相应的TenantID再次登录Graph API,但我发现我仍然可以读取目录数据


最初,我在另一个应用程序中调试相反的问题。另一个应用程序的配置与此应用程序相同,具有相同的权限(“读取目录数据”和“登录并读取用户配置文件”),但它总是抛出错误

System.Data.Services.Client.DataServiceClientException:{“odata.error”:{“code”:“Authorization_RequestDenied”,“message”:{“lang”:“en”,“value”:“权限不足,无法完成操作。”}}

如果任何登录信息错误,则返回的错误是不同的(400个错误请求或401个未授权),因此登录可以工作,但应用程序似乎没有访问目录数据所需的权限

我不能排除我的第一个应用程序曾经设置了这些其他权限并再次“撤销”,因此我不得不认为这是不可想象的:

一个应用程序的权限一旦被授予,就再也不会被撤销吗?


更新:不,没有那么容易。它们不仅不会被撤销,对于新的应用程序,它们也不会被设置。即使我检查了新应用的所有权限,“权限不足”错误仍然存在:


只要JWT身份验证令牌有效,权限就会保留。权限由令牌颁发者(login.microsoftonline.com)在JWT令牌中编码。 寿命是一小时


如果您再次登录并获得新令牌,则该令牌不应获得旧权限。您可以在或等网站上解码JWT令牌。

您需要确保在更改应用程序的权限时,您正在强制登录用户重新同意,以便为用户写入新权限

我相信目录中的逻辑是这样的,如果您已经获得了许可,那么令牌服务将基于那些已经同意的许可授予令牌。如果自上次用户同意后新权限已更改,则这些权限将不适用,因为用户从未同意这些权限

您可以通过在登录url中添加查询字符串“prompt=approve”来强制重新同意,这样您就可以查看应用程序所需的所有新权限,希望这能解决权限不足的问题


让我知道这是否有帮助

没有用户登录到应用程序。我的Windows服务正在使用应用程序的ClientID和TenantID以及密钥连接到Graph API,并且应该能够从Graph API读取数据,而无需进一步身份验证。即使没有用户在场的应用程序也必须先请求同意,然后才能运行。这意味着您必须让用户登录应用程序才能更新权限。