【问题标题】:How to access azure digital twin API using Service Principal?如何使用服务主体访问 Azure 数字孪生 API?
【发布时间】:2020-08-06 07:19:29
【问题描述】:

我的用例是每当我在 Azure 函数中从 Cosmos DB 获得触发器时,需要在没有任何人工交互的情况下与 Azure 数字孪生 API 进行交互。
从下面的链接中,我了解到我们可以使用 service principal 来实现它。
Is it possible to configure Azure Digital Twins API access for a Daemon App?

但我不知道如何使用数字孪生 API 对服务主体进行身份验证。
1)需要什么类型的身份验证以及流程如何?
2)如果是Oauth2,访问数字孪生的授权类型和范围是什么?

提前致谢。

【问题讨论】:

    标签: azure-active-directory azure-functions azure-function-app azure-digital-twins


    【解决方案1】:

    有一种(几乎)未记录的方式来使用数字孪生 API,而无需代理流程。我将它用于自动化任务以操作 ADT 的内容或为某些应用程序提供数据的只读视图。这一切都始于角色分配。在我第一次创建 ADT 实例时,请参阅 YAML 中的这个 sn-p。

    - 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
    

    this page 中描述了 ServicePrincipalId 对象类型,但在任​​何示例中都不再提及。这个 sn-p 将空间管理员权限授予服务主体。然后,您可以使用客户端密钥来检索允许您访问 ADT 的访问令牌。在 Azure Active Directory 中为 ADT 进行应用注册时,请转到 Certificates & Secrets 并创建一个新的客户端密码。

    下一步是检索服务主体的objectId,这不是应用注册的objectId。当您转到应用注册的概览选项卡时,您可以复制应用程序 ID 并在云控制台中执行以下命令:

    az ad sp show --id {the id you copied}
    

    这将显示有关您的服务主体的许多详细信息,包括被反对的内容。也复制这个。 快到了,要检索访问令牌,您需要 4 件事:

    1. 授权:https://login.microsoftonline.com/{您的租户 ID}
    2. ClientId:您的应用注册的应用 ID。
    3. ClientSecret:您创建的客户端密码。
    4. DigitalTwinsAppId:始终为 0b07f429-9f4b-4714-9392-cc5e8e80c8b0

    在 .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);
    

    【讨论】:

    • 嗨,你有机会看看我的回答吗?您的问题得到解决了吗?
    【解决方案2】:

    1) 需要什么类型的身份验证以及流程如何?

    正如你提到的帖子,你应该使用OAuth 2.0 On-Behalf-Of flow。 主要流程在这里:Call Digital Twins from a middle-tier web API.

    2)如果是Oauth2,访问的授权类型和范围是什么 数字孪生?

    你可以参考这个sample

    grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
    

    对于scope,它应该是您想要访问的数字孪生 API。 (例如空间、设备、用户或传感器)。见API summary

    【讨论】:

      猜你喜欢
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 2018-11-12
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2021-10-07
      • 1970-01-01
      相关资源
      最近更新 更多