为 Dataverse 插件或插件包设置 Power Platform 托管标识

Power Platform 托管标识允许 Dataverse 插件或插件包连接到 Azure 资源,以支持托管标识,而无需凭据。 本文可帮助您在 Power Platform 环境中设置托管标识。

必备条件

  • 有权预配用户分配的托管标识(UAMI)或应用程序注册的 Azure 订阅。
  • 插件或插件包的工具:
  • 用于对插件 程序集进行签名的有效证书。

设置受管身份

若要为 Dataverse 插件或插件包配置 Power Platform 托管标识,请完成以下步骤。

  1. 创建新的应用程序注册或用户分配的受管身份。
  2. 配置联合身份凭据。
  3. 创建和注册 Dataverse 插件或插件包。
    请务必生成插件程序集并注册插件或插件包。
  4. 在 Dataverse 中创建托管标识记录。
  5. 向应用程序或用户分配的托管标识(UAMI)授予对 Azure 资源的访问权限。
  6. 验证插件集成。

创建新的应用程序注册或用户分配的受管身份

可以根据以下方案在 Microsoft Entra ID 中创建用户分配的托管标识或应用程序。

  • 如果想要与连接到 Azure 资源(如 Azure Key Vault)的插件关联的应用标识,请使用 应用程序注册。 使用应用标识,可以在访问 Azure 资源的插件上应用 Azure 策略。
  • 如果希望服务主体访问 Azure 资源(例如 Azure Key Vault),可以预配 用户分配的托管标识

备注

请务必记下以下 ID,因为您将在后续步骤中使用它们。

  • 应用程序(客户端)ID
  • 租户 ID

配置联合身份凭据

若要配置托管标识,在您在上一节中创建的 Azure 门户中打开用户分配的托管标识或 Microsoft Entra ID 应用程序。

  1. 转到 Azure 门户
  2. 导航到 Microsoft Entra ID
  3. 选择“应用注册”
  4. 打开在设置托管标识中创建的应用。
  5. 导航到证书和密码
  6. 选择 “联合凭据 ”选项卡,然后选择“ 添加凭据”。
  7. 选择“颁发者”作为其他颁发者
  8. 输入以下信息:

发行人

使用租户的 v2.0 发行者:

https://login.microsoftonline.com/{tenantID}/v2.0

Example

https://login.microsoftonline.com/5f8a1a9f-2e1a-415f-b10c-84c3736a21b9/v2.0

类型

选择 “显式主题标识符”。

主体标识符

选择与证书类型匹配的格式:

  • 用于开发的自签名证书:

    /eid1/c/pub/t/{encodedTenantId}/a/qzXoWDkuqUa3l6zM5mM0Rw/n/plugin/e/{environmentId}/h/{hash}
    
  • 受信任的颁发者证书(建议用于生产):

    /eid1/c/pub/t/{encodedTenantId}/a/qzXoWDkuqUa3l6zM5mM0Rw/n/plugin/e/{environmentId}/i/{issuer}/s/{certificateSubject}
    

段引用

细分市场 Description
eid1 标识格式版本
c/pub 公有云、政府社区云(GCC)的云代码,以及 GCC 中的第一个发布站。
t/{encodedTenantId} 租户 ID
a/qzXoWDkuqUa3l6zM5mM0Rw/ 仅限内部使用。 请勿修改。
n/plugin 插件组件
e/{environmentId} 环境 ID
h/{hash} 证书的 SHA-256 哈希值(仅限自签名)
i/{issuer}
s/{certificateSubject}
受信任的颁发者详细信息

生成自签名证书

每个插件都必须具有可验证的标识,签名证书充当插件的唯一指纹。 以下代码是一个示例 PowerShell 代码片段,可用于为开发或测试方案生成自签名证书。 可以作为参考,遵循示例 3

 $params = @{
     Type = 'Custom'
     Subject = 'E=admin@contoso.com,CN=Contoso'
     TextExtension = @(
         '2.5.29.37={text}1.3.6.1.5.5.7.3.4',
         '2.5.29.17={text}email=admin@contoso.com' )
     KeyAlgorithm = 'RSA'
     KeyLength = 2048
     SmimeCapabilities = $true
     CertStoreLocation = 'Cert:\CurrentUser\My'
 }
 New-SelfSignedCertificate @params

备注

编码 {encodedTenantId}

  1. 转换 GUID 转为 十六进制
  2. 转换十六进制 → Base64URL(而不是标准 Base64)。

自签名哈希

  • 基于.cer计算 SHA-256。 如果有 .pfx,请首先导出 .cer
    CertUtil -hashfile <CertificateFilePath> SHA256
    
    $cert = Get-PfxCertificate -FilePath "path	o\your.pfx"
    $cert.RawData | Set-Content -Encoding Byte -Path "extracted.cer"
    

专用 Azure 云环境

当在公有云、GCC 和 GCC 的首发站之外进行部署时,需明确设置访问群体颁发者 URL使用者前缀

观众 颁发者 URL 主题前缀
GCC High 和 DoD api://AzureADTokenExchangeUSGov https://login.microsoftonline.us /eid1/c/usg
月饼(中国) api://AzureADTokenExchangeChina https://login.partner.microsoftonline.cn /eid1/c/chn
美国国民(USNAT) api://AzureADTokenExchangeUSNat https://login.microsoftonline.eaglex.ic.gov /eid1/c/uss
US Secure (USSec) api://AzureADTokenExchangeUSSec https://login.microsoftonline.scloud /eid1/c/usn

备注

受众区分大小写,必须完全匹配。
对于公有云、GCC 和 GCC 中的第一个发布站(以及其他未列出的云),默认值为:
受众 api://AzureADTokenExchange、签发者 https://login.microsoftonline.com、主题前缀 /eid1/c/pub

创建和注册 Dataverse 插件或插件包

创建插件组件

打包和签名

对插件包进行签名

如果要生成插件包,请使用 NuGet 签名 CLI 从 .nuspec 或 .csproj 文件生成包。 生成包后,使用证书对其进行签名。

 nuget sign YourPlugin.nupkg `
   -CertificatePath MyCert.pfx `
   -CertificatePassword "MyPassword" `
   -Timestamper http://timestamp.digicert.com

对插件程序集进行签名

如果要注册插件(程序集),请使用 SignTool.exe (签名工具)使用证书对 DLL 进行签名。

signtool sign /f MyCert.pfx /p MyPassword /t http://timestamp.digicert.com /fd SHA256 MyAssembly.dll

可以选择通过提供符合 RFC 3161 的时间戳服务器的 URL 来添加时间戳。

备注

仅出于开发或测试目的使用自签名证书。 请勿在生产环境中使用自签名证书。

注册插件

  • 如果计算机上尚未安装插件注册工具,请安装该工具。 有关详细信息,请参阅 Dataverse 开发工具

  • 注册插件。 更多信息,请参阅注册插件

在 Dataverse 中创建托管标识记录

若要在 Dataverse 中预配托管标识记录,请完成以下步骤。

  1. 使用 REST 客户端(如 Insomnia)发送 HTTP POST 请求创建托管身份。 使用以下格式来定义 URL 和请求正文。

    POST https://<<orgURL>>/api/data/v9.0/managedidentities
    

    请务必将 orgURL 替换为组织的 URL。

  2. 确保 credentialsource 在有效负载中设置为 2 ,对于特定于环境的方案, subjectscope 设置为 1版本 在有效负载中设置为 1。

    示例有效负载

    {
      "applicationid": "<<appId>>", //Application Id, or ClientId, or User Managed Identity
      "managedidentityid": "<<anyGuid>>",
      "credentialsource": 2, // Managed client
      "subjectscope": 1, //Environment Scope
      "tenantid": "<<tenantId>>", //Entra Tenant Id
      "version": 1
    }
    
  3. 通过发出 HTTP PATCH 请求将其与步骤 1 中创建的托管标识相关联来更新插件包或插件程序集记录。

    插件程序集

    PATCH https://<<orgURL>>/api/data/v9.0/pluginassemblies(<<PluginAssemblyId>>)
    

    插件包

    PATCH https://<<orgURL>>/api/data/v9.0/pluginpackages(<<PluginPackageId>>)
    

    示例有效负载

    {
      "managedidentityid@odata.bind": "/managedidentities(<<ManagedIdentityGuid>>)"
    }
    

    请务必将 orgURLPluginAssemblyId (或 PluginPackageId)和 ManagedIdentityGuid 替换为你的值。

向应用程序或用户分配的托管标识授予对 Azure 资源的访问权限

如果需要通过应用程序 ID 来访问 Azure 资源(例如 Azure Key Vault),请为应用程序或用户分配的托管标识授予对该资源的访问权限。

验证插件集成

验证您的插件是否可以安全地请求访问支持托管标识的 Azure 资源,从而无需单独的凭据。

常见问题 (FAQ)

如何解决此错误?

如果您收到以下错误:
获取错误 - 配置问题正在阻止身份验证。
AADSTS700213:找不到匹配的联合标识记录

完成以下步骤以解决此问题:

  1. 请确保 FIC 已正确配置并保存。

  2. 请验证颁发者/主题是否符合之前指定的格式。

    还可以在错误堆栈中找到预期的格式。

如何解决“无法访问或连接到 Power Platform”错误?

请参阅 Power Platform 网址和 IP 地址范围,以确保 Power Platform 终结点可以访问并加入白名单。