我有2个租户:
我的webapp在租户A上,我在租户B上使用Azure AD在门户上配置了身份验证。
在租户B上,我只使用一项不需要管理员同意的权限注册了该应用程序: Windows Azure Active Directory>登录并阅读用户个人资料。
当用户登录时,他收到以下错误:
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门户执行此操作。从应用程序的“设置”边栏选项卡中,单击“所需权限”,然后单击“授予权限”按钮。
我不知道为什么必须这样做,因为我只使用不需要管理员同意的权限。
答案 0 :(得分:0)
我认为当您通过"& prompt = admin_consent"时会出现错误。在登录URL中。
即使您没有请求管理员权限,如果您传递该查询字符串,它也会尝试向您显示同意对话,以便您可以代表整个租户同意,这是一个只有管理员可以执行的操作
答案 1 :(得分:0)
您的设置存在一些潜在问题:
// 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
,这将允许任何租户的用户登录。common
,由于以下错误,我无法将其用于我的测试租户: common
。这表示应用程序未配置为多租户应用程序。这是you must explicitly turn on。您应该查看How to sign in any Azure Active Directory (AD) user using the multi-tenant application pattern文章,因为它会更详细地解释上述所有要点。