Azure Active Directory同意是否已缓存?

时间:2017-10-17 06:42:01

标签: azure azure-active-directory adal

我们正在构建一个使用Azure AD的本机应用程序。该应用程序需要一些权限(如读取用户配置文件,执行Azure服务管理API等)。

当用户第一次使用我们的应用程序时,会要求他们登录,一旦他们登录,他们就会看到同意屏幕(他们同意我们的申请)。一旦用户同意,他们就可以在他们的Azure AD中看到我们的应用程序(在" Applications"标签下)。到目前为止一切都很好。

此用户现在所做的是从Azure AD中手动删除我们的应用程序(再次通过" Applications"标签)。根据我们对同意模型的理解,这意味着用户已经取消了对我们申请的同意。

现在,当该用户登录我们的应用程序时,我们期待的是再次向用户呈现同意屏幕(如第一次)。然而,实际行为是用户没有看到这样的屏幕,用户只需登录我们的应用程序。此外,当用户返回Azure AD时,他们不会在同意应用列表中看到我们的应用。

所以我的问题是:

  1. Azure AD会以某种方式缓存同意吗?
  2. 如果同意被缓存,缓存此同意的时间有多长?
  3. 如果同意被缓存,是否有办法让我们以编程方式或其他方式清除此同意?
  4. 对于为什么会发生这种情况的任何见解都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

在Azure Active Directory中,用户同意被注册为用户对象和表示客户端应用程序的服务主体对象之间的链接。

此链接在AAD Graph API中表示为OAuth2PermissionGrant

你这样说:

  

此用户现在所做的是从他们的手动中删除我们的应用程序   Azure AD(再次通过“应用程序”选项卡)。基于我们的   了解同意模型,这意味着用户   已取消同意我们的申请。

我想澄清一下。您可能知道,当您创建新的AAD应用程序时,您需要记住Application Object and a Service Principal之间的区别。

非常具体地说,如果您删除代表客户端应用程序的服务主体,则将销毁连接到该服务主体的所有同意链接,从而有效地删除同意。如果您只删除应用程序对象,则可能无法说明,这可能是您遇到问题的地方。

我解释here撤销Azure Active Directory应用程序同意所需的最简单步骤。如果这有帮助,请告诉我。