我有一个现有的Web应用程序,我正在尝试添加Office 365集成。我希望所有用户都能够使用OAuth2登录,并且管理员用户能够从目录中读取用户。
所以我创建了一个Azure AD应用程序,并授予了“启用登录和读取用户配置文件”和“读取目录数据”委派权限。
当O365管理员用户登录时,它按预期工作。但是当非管理员用户登录时,他们会收到错误“AADSTS90093:由于缺乏权限,调用主体无法同意。”。
经过多次尝试(文档远非清晰),我发现需要将prompt = admin_consent附加到auth url。通过将其附加到auth URL,如果我使用管理员登录,那么随后的非管理员登录将按预期工作。
问题是,我不知道即将单击我的登录页面上的“使用Office 365登录”按钮的用户是否为管理员。似乎从O365域登录应用程序的第一个人必须是O365管理员,并且auth url必须具有prompt = admin_consent。如果在管理员之前尝试登录非管理员,则会收到AADSTS90093错误,我的应用程序似乎没有任何优雅处理此场景的方法。更糟糕的是,他们根本无法登录。
我真正需要的是一个登录按钮,将非管理员用户登录,但没有访问目录,并将管理员用户登录带有目录访问权限,但这似乎是不可能的。Google有范围的概念,但在Microsoft的实现中似乎缺少这个。
我看到两个潜在的解决方案,但都不太好:
1. 在登录页面上添加一个带有“作为Office 365管理员登录”的复选框。如果选中此复选框,则将prompt = admin_consent附加到auth url。这样做的问题(除了使我的登录页面混乱)是它无法满足管理员之前尝试登录的非管理员。所以大多数用户仍然无法登录-不太好。
2. 创建2个Azure AD应用程序。其中一个具有“启用登录和读取用户配置文件”和“读取目录数据”权限,另一个仅具有“启用登录和读取用户配置文件”权限。登录页面链接到第一个应用程序,它允许管理员和非管理员用户随时登录。然后,在我的应用程序中的配置页面上,我有一个“完成与O365的集成”的选项,它提供了一个链接,用于验证第二个AAD应用程序。这样,我可以保证所有用户都可以执行基本的登录,并且当管理员单击第二个按钮时,我可以与目录和日历集成。这样做的缺点是,即使第一个登录的用户是o365管理员,我也无法访问目录,直到完成第二个身份验证。其次,我的应用程序将在客户的AAD应用程序列表中显示两次。
所以我创建了一个Azure AD应用程序,并授予了“启用登录和读取用户配置文件”和“读取目录数据”委派权限。
当O365管理员用户登录时,它按预期工作。但是当非管理员用户登录时,他们会收到错误“AADSTS90093:由于缺乏权限,调用主体无法同意。”。
经过多次尝试(文档远非清晰),我发现需要将prompt = admin_consent附加到auth url。通过将其附加到auth URL,如果我使用管理员登录,那么随后的非管理员登录将按预期工作。
问题是,我不知道即将单击我的登录页面上的“使用Office 365登录”按钮的用户是否为管理员。似乎从O365域登录应用程序的第一个人必须是O365管理员,并且auth url必须具有prompt = admin_consent。如果在管理员之前尝试登录非管理员,则会收到AADSTS90093错误,我的应用程序似乎没有任何优雅处理此场景的方法。更糟糕的是,他们根本无法登录。
我真正需要的是一个登录按钮,将非管理员用户登录,但没有访问目录,并将管理员用户登录带有目录访问权限,但这似乎是不可能的。Google有范围的概念,但在Microsoft的实现中似乎缺少这个。
我看到两个潜在的解决方案,但都不太好:
1. 在登录页面上添加一个带有“作为Office 365管理员登录”的复选框。如果选中此复选框,则将prompt = admin_consent附加到auth url。这样做的问题(除了使我的登录页面混乱)是它无法满足管理员之前尝试登录的非管理员。所以大多数用户仍然无法登录-不太好。
2. 创建2个Azure AD应用程序。其中一个具有“启用登录和读取用户配置文件”和“读取目录数据”权限,另一个仅具有“启用登录和读取用户配置文件”权限。登录页面链接到第一个应用程序,它允许管理员和非管理员用户随时登录。然后,在我的应用程序中的配置页面上,我有一个“完成与O365的集成”的选项,它提供了一个链接,用于验证第二个AAD应用程序。这样,我可以保证所有用户都可以执行基本的登录,并且当管理员单击第二个按钮时,我可以与目录和日历集成。这样做的缺点是,即使第一个登录的用户是o365管理员,我也无法访问目录,直到完成第二个身份验证。其次,我的应用程序将在客户的AAD应用程序列表中显示两次。
看起来我在这里尝试实现一个微不足道的事情 - 能够登录所有用户,但如果管理员登录,则可以访问目录。那么如何使用AAD应用程序实现此目标?