0

我目前正在开发一个与 Graph API 通信的应用程序。我没有任何后端,只有一个 SPA。我使用 npm 包@microsoft/microsoft-graph-client

该应用程序应该能够更改 givenName,AD 用户的姓氏。

一开始我创建了一个新的 AuthCodeMSALBrowserAuthenticationProvider 实例并将其与图形客户端一起使用,我不确定使用的范围是否正确:

 const authProvider = new AuthCodeMSALBrowserAuthenticationProvider(
        this.msalService.instance as PublicClientApplication,
        {
          account: this.msalService.instance.getActiveAccount()!,
          scopes: ['User.ReadWrite.All'],
          interactionType: InteractionType.Redirect,
        }
      );

 this.graphClient = Client.initWithMiddleware({
        authProvider: authProvider,
        defaultVersion: 'beta',
      });

我的电话看起来像这样

 const result = await this.authService.graphClient
        .api(`/users/${userId}`)
        .patch({
          givenName: firstname,
          surname: lastname
        });

但是,我收到“权限不足”错误消息。

Could not update user with id 8639e42f-de7f-485a-9b18-ccd67d7b0146 {
  "statusCode": 403,
  "code": "Authorization_RequestDenied",
  "requestId": "xy",
  "date": "2022-02-03T11:45:48.000Z",
  "body": "{\"code\":\"Authorization_RequestDenied\",\"message\":\"Insufficient privileges to complete the operation.\",\"innerError\":{\"date\":\"2022-02-03T12:45:48\",\"request-id\":\"xy\",\"client-request-id\":\"xy\"}}"
}

我设置了以下权限(在“企业应用程序”下):在此处输入图像描述

API 权限(在“应用注册”下): 在此处输入图像描述

4

2 回答 2

1

请确保您已授予 Delegated Permission Admin Consent 。

implicit flow我使用创建 Azure AD 应用程序的地方进行了相同的测试,并Delegated Permission在未授予管理员同意的情况下提供了以下类似内容:

在此处输入图像描述

在此处输入图像描述

授予管理员同意后,问题已解决,如下所示:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

于 2022-02-03T14:19:41.937 回答
0

您可以在此处查看权限参考,以设置正确的范围:https ://docs.microsoft.com/en-us/graph/permissions-reference#mail-permissions

您必须注意到“在委托方案中,授予您的应用程序的有效权限受到组织中登录用户的权限的约束。”

如果您的应用程序是守护程序(无需人工交互的后端服务),您应该使用 "Application permission" 而不是 "Delegated permission"

您可以根据此处的场景选择正确的身份验证提供程序和正确的权限类型:https ://docs.microsoft.com/en-us/graph/sdks/choose-authentication-providers?tabs=Javascript

PS:您应该隐藏第二个屏幕截图的状态栏,因为它显示私人信息。

于 2022-02-04T09:33:36.450 回答