visual-studio-code - DefaultAzureCredential:使用 VisualStudio 代码凭据禁止图形访问
问题描述
我正在尝试从 Azure 函数中的 ms 图中读取用户属性。对于身份验证,我使用了 Azure.Identity 中的 DefaultAzureCredential 类。
使用本地共享令牌缓存凭据和 Azure 中的托管身份凭据进行访问是不可能的!我想使用 Visual Studio Code Credential,但在调用图形 API 时收到“Authorization_RequestDenied!权限不足,无法完成操作”错误消息。
问题似乎是我使用 VS Code 凭据收到的访问令牌。用户帐户与我用于共享令牌缓存凭据的用户帐户相同。
有任何想法吗?谢谢你。
代码:
DefaultAzureCredentialOptions options = new DefaultAzureCredentialOptions();
options.VisualStudioCodeTenantId = Environment.GetEnvironmentVariable("Debug_VisualStudioCodeTenantId");
var credential = new DefaultAzureCredential(options);
token = credential.GetToken(
new Azure.Core.TokenRequestContext(
new[] { "https://graph.microsoft.com/.default" }));
accessToken = token.Token;
var graphServiceClient = new GraphServiceClient(
new DelegateAuthenticationProvider((requestMessage) =>
{
requestMessage
.Headers
.Authorization = new AuthenticationHeaderValue("bearer", accessToken);
return Task.CompletedTask;
}));
var users = await graphServiceClient.Users.Request().GetAsync(); // throw the forbidden exception
异常: “代码:Authorization_RequestDenied\r\n消息:权限不足,无法完成操作。\r\n内部错误:\r\n\tAdditionalData:\r\n\t日期:2021-04-20T08:02:23\r\ n\trequest-id: ...\r\n\tclient-request-id: ...\r\nClientRequestId: ...\r\n"
解决方案
检查 VS Code 返回的令牌后,它似乎缺少所需的委托权限/范围。文档说列出用户需要其中之一:
User.ReadBasic.All、User.Read.All、User.ReadWrite.All、Directory.Read.All、Directory.ReadWrite.All、Directory.AccessAsUser.All
由于 VS Code 使用的服务主体不需要任何这些,因此它不起作用。在尝试显式获取具有所需范围的令牌后,它似乎也不起作用。
因此,目前 VS Code 凭证似乎不适用于此目的。您将需要不同的凭据,或者可能将客户端密码/证书凭据与您自己的应用程序注册一起使用。
推荐阅读
- javascript - 扩展会话弹出母版页 ASP.Net
- solidity - TON-坚固。如何从编码到单元格中的数据中获取哈希值?tvm.hash 模拟?
- java - 如何使用 CSVWriter 从逗号分隔的键写入 csv:字符串的值列表
- roslyn - 如何让 Roslyn 为我生成一个标识符名称?
- javascript - 使用 jsdom 测试 Web 组件
- amazon-web-services - 在 AWS SageMaker 上获取“[Errno 28] 设备上没有剩余空间”,剩余大量存储空间
- python - 如何递归迭代字典并返回结果?
- c# - 如何在子弹被射击时为其添加旋转?
- javascript - 使用文档选择器选择自定义元素
- python - 更改十字准线 matplotlib 光标示例的起始位置