我的用例是每当我从 Azure 函数中的 Cosmos DB 获得触发器时,需要在没有任何人工交互的情况下与 Azure 数字孪生 API 进行交互。
从下面的链接中,我了解到我们可以使用服务主体来实现它。
是否可以为守护程序应用配置 Azure 数字孪生 API 访问?
但我不知道如何使用数字孪生 API 对服务主体进行身份验证。
1)需要什么类型的身份验证以及流程如何?
2)如果是Oauth2,访问数字孪生的授权类型和范围是什么?
提前致谢。
我的用例是每当我从 Azure 函数中的 Cosmos DB 获得触发器时,需要在没有任何人工交互的情况下与 Azure 数字孪生 API 进行交互。
从下面的链接中,我了解到我们可以使用服务主体来实现它。
是否可以为守护程序应用配置 Azure 数字孪生 API 访问?
但我不知道如何使用数字孪生 API 对服务主体进行身份验证。
1)需要什么类型的身份验证以及流程如何?
2)如果是Oauth2,访问数字孪生的授权类型和范围是什么?
提前致谢。
有一种(几乎)未记录的方式来使用数字孪生 API,而无需代表流程。我将它用于自动化任务以操作 ADT 的内容或为某些应用程序提供数据的只读视图。这一切都始于角色分配。在我第一次创建 ADT 实例时,请参阅 YAML 中的这段代码片段。
- roleId: 98e44ad7-28d4-4007-853b-b9968ad132d1 # Space Administrator
objectId: abcd1234-5556-44a2-1234-402dbd999619 # Service Principal object ID
objectIdType: ServicePrincipalId
tenantId: 1234567-8901-2345-abcd-123456789 # Azure subscription tenant
此页面上描述了 ServicePrincipalId 对象类型,但在任何示例中都不再提及。此代码段授予服务主体的空间管理员权限。然后,您可以使用客户端密钥来检索允许您访问 ADT 的访问令牌。在 Azure Active Directory 中为 ADT 进行应用注册时,请转到证书和机密并创建一个新的客户端机密。
下一步是检索 Service Principal 的 objectId,这不是应用程序注册的 objectId。当您转到 App Registration 的 Overview 选项卡时,您可以复制 Application ID 并在云控制台中执行以下命令:
az ad sp show --id {the id you copied}
这将显示有关您的服务主体的许多详细信息,包括反对的内容。也复制这个。快到了,要检索访问令牌,您需要 4 件事:
在 .NET Core 中检索访问令牌
var authContext = new AuthenticationContext({Authority});
var clientCredential = new ClientCredential({ClientId}, {ClientSecret});
var result = await authContext.AcquireTokenAsync({DigitalTwinsAppId}, clientCredential);
return result.AccessToken;
将其添加到您的标头(下面的 HttpClient 示例),您就可以开始了!
httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
1)需要什么类型的身份验证以及流程如何?
正如您提到的帖子,您应该使用OAuth 2.0 On-Behalf-Of flow。主要流程在这里:从中间层 Web API 调用数字孪生。
2)如果是Oauth2,访问数字孪生的授权类型和范围是什么?
您可以参考此示例:
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
而对于scope
,它应该是您想要访问的数字孪生 API。(例如空间、设备、用户或传感器)。请参阅API 摘要。