我的用例是,每当我在Azure函数中从Cosmos DB获得触发器时,都需要与Azure数字双API交互,而不需要任何人工交互。
通过下面的链接,我了解到我们可以使用服务主体来实现它。
是否可以为Daemon应用程序配置Azure数字双胞胎API访问权限?
但我不知道如何使用数字双API来验证服务主体。
1)需要何种类型的身份验证以及流程如何?
2)如果是Oauth2,那么访问数字双胞胎的授予类型和范围是什么?
提前谢谢。
发布于 2020-04-23 07:11:02
有一种(几乎)无文档的方式来使用数字双胞胎API,而不代表流。我将它用于自动任务,以操作ADT的内容或提供某些应用程序的数据只读视图。一切都是从角色分配开始的。看到YAML中的这个片段,当我第一次创建它时,我使用它来提供我的ADT实例。
- 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注册应用程序时,请转到证书和机密,并为新的客户端保密。
下一步是检索服务主体的objectId,这是而不是应用程序注册的objectId。当您转到应用程序注册的概述选项卡时,您可以在云控制台中复制应用程序ID并执行以下命令:
az ad sp show --id {the id you copied}
这将显示您的服务校长的许多细节,包括被反对的人。把这个也复制下来。快到了,要检索访问令牌,您需要4件事情:
在.NET核中检索访问令牌
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);
发布于 2020-04-23 05:10:10
1)需要何种类型的身份验证以及流程如何?
正如您所提到的,您应该使用OAuth 2.0代表流。主要流程在这里:从中间层web API调用数字双胞胎。
2)如果是Oauth2,那么访问数字双胞胎的授予类型和范围是什么?
您可以参考这个示例
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
对于scope
,它应该是您想要访问的数字双API。(例如,空间、设备、用户或传感器)。见API摘要。
https://stackoverflow.com/questions/61379208
复制相似问题