如果不应该使用Azure AD管理员同意

时间:2017-05-20 02:56:40

标签: azure-active-directory

我有2个租户:

  • 我的组织之一,我管理用户(A)
  • 我管理应用程序和权限(B)

我的webapp在租户A上,我在租户B上使用Azure AD在门户上配置了身份验证。

在租户B上,我只使用一项不需要管理员同意的权限注册了该应用程序: Windows Azure Active Directory>登录并阅读用户个人资料

enter image description here

当用户登录时,他收到以下错误:

  

AADSTS90093:此操作只能由管理员执行。退出并以管理员身份登录或与您单位的管理员联系。

我认为不应该引发此错误,因为应用程序所需的唯一权限不需要admin。

修改

这是我在未登录时尝试访问应用程序时重定向到的URL

https://login.microsoftonline.com/d6ac45af-3289-4f79-a826-27824e1c467d/oauth2/authorize?response_type=code+id_token&redirect_uri=https%3A%2F%2Ftechnipfmc-tools-app-test.azurewebsites.net%2F.auth%2Flogin%2Faad%2Fcallback&client_id=d340f0ed-5eb3-43e8-9a50-c449649f3ee1&scope=openid+profile+email&response_mode=form_post&nonce=1895ec0ffef64447bbb712bdae61c7fb_20170521070654&state=redir%3D%252F

编辑2

我找到了解决方案here

  

作为管理员,您还可以代表租户中的所有用户同意应用程序的委派权限。这将阻止同意对话框出现在租户中的每个用户。您可以从应用程序页面的Azure门户执行此操作。从应用程序的“设置”边栏选项卡中,单击“所需权限”,然后单击“授予权限”按钮。

我不知道为什么必须这样做,因为我只使用不需要管理员同意的权限。

2 个答案:

答案 0 :(得分:0)

我认为当您通过"& prompt = admin_consent"时会出现错误。在登录URL中。

即使您没有请求管理员权限,如果您传递该查询字符串,它也会尝试向您显示同意对话,以便您可以代表整个租户同意,这是一个只有管理员可以执行的操作

答案 1 :(得分:0)

您的设置存在一些潜在问题:

  1. 您的授权请求设置为特定租户,即具有tenantId // config/datastores.js module.exports.datastores = { default : { adapter: 'sails-mysql', url: 'mysql://username@localhost:3306/my_db' } } // config/models.js module.exports.models = { // No need for a `datastore` property; it will default to `default`. migrate: 'drop', attributes: { // timezone-agnostic ISO 8601 JSON timestamp strings (e.g. '2017-12-30T12:51:10Z') createdAt: { type: 'string', autoCreatedAt: true, }, updatedAt: { type: 'string', autoUpdatedAt: true, } } }; // No need for `datastores` property in config/env/development.js // if you use the default datastore in development. 的租户。只有该租户的用户才能登录。如果此tenantId对应于您组织的用户(A),则忽略此点。否则,您应该将此替换为该租户的tenantId或d6ac45af-3289-4f79-a826-27824e1c467d,这将允许任何租户的用户登录。
  2. 您的应用程序不是多租户。出于测试目的,我将tenantId替换为common,由于以下错误,我无法将其用于我的测试租户: common。这表示应用程序未配置为多租户应用程序。这是you must explicitly turn on
  3. 您所在组织的租户(A)可能已禁止常规用户同意应用。如果禁用此功能,则始终需要管理员同意才能在租户中设置应用程序。要测试是否是这种情况,请在上面的地址点#1(使用/ common /)和#2进行测试,然后尝试使用任何其他租户。如果您能够与其他租户同意但不同意您组织的租户,那么您将知道您的组织需要管理员同意。
  4. 您应该查看How to sign in any Azure Active Directory (AD) user using the multi-tenant application pattern文章,因为它会更详细地解释上述所有要点。