【问题标题】:Multitenant app issue accessing graph api访问图形 api 的多租户应用程序问题
【发布时间】:2020-06-09 16:37:01
【问题描述】:
我有一个带有 masal 和 Web Api 的多租户应用程序 js 客户端,一切都运行良好。用户可以登录并使用API。
我正在尝试使用 Graph Api 读取用户所属的广告组。
它适用于已注册应用程序的同一租户上的用户,但如果我使用来自不同租户的用户,我有 403(权限不足,无法完成操作。)错误,尝试访问 /users/{userId}/ memberOf 端点。
在我为客户端和服务器在 azure 上注册应用程序后,我在 Api 权限部分(应用程序权限)中设置了适当的权限,我认为是这种情况,但我必须遗漏其他东西。
知道我错过了什么吗?
【问题讨论】:
标签:
.net-core
jwt
azure-active-directory
asp.net-core-webapi
msal
【解决方案1】:
请参考以下文章:
Understand user and admin consent
对于多租户应用程序,应用程序的初始注册位于开发人员使用的 Azure AD 租户中。当来自不同租户的用户首次登录应用程序时,Azure AD 会要求他们同意应用程序请求的权限。如果他们同意,则在用户的租户中创建称为服务主体的应用程序表示,并且可以继续登录。还会在记录用户对应用程序的同意的目录中创建一个委托。
您的应用程序使用需要管理员同意的权限 (/users/{userId}/memberOf),如果普通用户尝试登录请求需要管理员同意的委派权限的应用程序,您的应用程序会收到错误消息。
在 Azure AD V2.0 中,您可以将用户重定向到 Microsoft 身份平台管理员同意端点:
// Line breaks are for legibility only.
GET https://login.microsoftonline.com/{tenant}/v2.0/adminconsent?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&state=12345
&redirect_uri=http://localhost/myapp/permissions
&scope=
https://graph.microsoft.com/calendars.read
https://graph.microsoft.com/mail.send
查看文档:Admin consent on the Microsoft identity platform