我已经使用 Azure AD 仪表板实现了 MSAL 库,授予了 user.read、user.read.all、contacts.read、contacts.read.all、openid、profile、directory.read.all 的权限。租户(同一组织的账户)能够登录他们的账户并能够使用访问令牌获取他们的联系人。当我尝试任何微软个人帐户时,登录效果很好,能够获取访问令牌,但是当我使用端点(https://graph.microsoft.com/v1.0/me/contacts)进行 Microsoft Graph api 调用时,我得到了401 未经授权的错误。
当我检查请求的响应对象以获取访问令牌时,对于租户,响应包括范围数组:
scopes: Array(13)
0: "Calendars.Read"
1: "Calendars.Read.Shared"
2: "Calendars.ReadWrite"
3: "Calendars.ReadWrite.Shared"
4: "Contacts.Read"
5: "Directory.AccessAsUser.All"
6: "Directory.Read.All"
7: "openid"
8: "profile"
9: "User.Read"
10: "User.Read.All"
11: "User.ReadBasic.All"
12: "email"
和
对于个人帐户,它是:
scopes: Array(2)
0: "openid"
1: "profile"
不知何故,个人帐户没有获得管理员授予的范围的权限。
我注册的应用程序还支持的帐户类型是:
Accounts in any organizational directory and personal Microsoft accounts (e.g. Skype, Xbox, Outlook.com)
All users with a work or school, or personal Microsoft account can use your application or API. This includes Office 365 subscribers.
这是我的代码中用于登录用户的配置:
let msalConfig = {
auth: {
clientId: <client_id>
};
let signinScopes = ['user.read.all', 'contacts.read'];
和我发出访问令牌请求时通过的范围:
let tokenRequest = {
scopes: ["user.read.all"]
};
当我在下面传递令牌时,它会给出错误“请求被拒绝,因为请求的一个或多个范围未经授权或已过期。用户必须首先登录并授予客户端应用程序对所请求范围的访问权限。
var tokenRequest = {
scopes: ["user.read.all", "contacts.read"]
};
我希望获得所有已登录 Microsoft 帐户的联系人。