User Extensions上的随机访问被拒绝错误

Lau*_*ema 7 azure-active-directory microsoft-graph

在Graph API中使用扩展时:

graphUser = graphClient.Users.Request().AddAsync(graphUser).Result;

OpenTypeExtension newExtension = new OpenTypeExtension()
{
    ExtensionName = "CustomName",
    AdditionalData = new Dictionary<string, object>
    { { "CustomID", user.CustomID }
    }
};

graphClient.Users[graphUser.UserPrincipalName]
    .Extensions
    .Request()
    .AddAsync(newExtension)
    .Wait();
Run Code Online (Sandbox Code Playgroud)

我随机得到这些错误:

Code: AccessDenied
Message: Access Denied
Run Code Online (Sandbox Code Playgroud)

有时候它有效,有时则不然.我似乎找不到相关性.当我逐步调试调试器中的代码时,如果我不间断地运行它,它会更频繁地工作.但是,如果我在行之间添加睡眠(以解决处理延迟),则无法解决问题.

该应用程序具有访问API所需的所有权限.

问题不仅仅在于POST,而且还在GET下面的代码示例中所示,导致相同的错误.

User user = graphClient.Users[userName]
    .Request()
    .GetAsync()
    .Result;

user.Extensions = graphClient.Users[userName]
    .Extensions
    .Request()
    .GetAsync()
    .Result;
Run Code Online (Sandbox Code Playgroud)

有没有人有这个问题的经验?提前致谢!

编辑:

我发现一旦错误开始显示,就需要删除用户.一个用户的错误并不一定意味着另一个用户的错误.

编辑2:

我也在GitHub上发布了这个问题.在这里您可以找到有关此问题的更多信息.它现在被标记为一个错误.

Lau*_*ema 2

事实证明,用户主体名称是缓存的引用。由于我正在运行测试,这意味着要多次重新创建相同的测试用户,因此引用 UPN 指向旧的用户对象,从而导致访问被拒绝错误。

通过使用对象的 Id 可以避免这个问题,如下所示:

 graphClient.Users[graphUser.Id]
    .Extensions
    .Request()
    .AddAsync(newExtension)
    .Wait();
Run Code Online (Sandbox Code Playgroud)

我相信团队会修复参考错误,但我当然不能代表他们说话。无论哪种情况,我都建议使用 Id 属性来确定。