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

时间:2017-01-11 10:22:58

标签: azure azure-ad-graph-api

我在一年前的Azure Active Directory中定义了一个应用程序,那时候,我玩了所需的权限,直到一切看起来都有效。

从后面到几分钟前,该应用程序对“Windows Azure Active Directory”具有两个权限:“读取目录数据”和“登录并读取用户配置文件”。

然后我撤销了它们并点击了“保存”:

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

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

  

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

如果任何登录信息有误,则返回的错误不同(400 Bad Request或401 Not Authorized),因此登录有效,但似乎应用程序没有访问目录数据所需的权限。

While browsing the web I found that the app needs more permissions to be able to read directory data.

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

可能是应用程序的权限一旦被授予,就永远不会再次被撤销?

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

您可以做的是强制重新同意,在您的登录URL中添加查询字符串“prompt = consent”,然后您应该能够看到应用程序所需的所有新权限,并希望这将解决您的不足特权问题。

请告诉我这是否有帮助!