身份验证(预览)
本文概述了调用 Power Platform API(预览)的 Microsoft Entra 设置。 要通过 Power Platform API 访问可用资源,您必须从 Microsoft Entra 获取持有者令牌并将其作为标头与每个请求一起发送。 根据您支持的身份类型(用户与服务主体),获取此持有者令牌的流不同,如本文所述。
要获取具有正确权限的持有者令牌,需要执行以下步骤:
- 在您的 Microsoft Entra 租户中创建应用程序注册
- 配置 API 权限
- 配置公共客户端(可选)
- 配置证书和机密(可选)
- 请求访问令牌
步骤 1. 创建应用程序注册
导航到 Microsoft Entra 应用注册页面,创建一个新注册。 为应用程序命名,并确保选择了单租户选项。 您可以跳过重定向 URI 设置。
步骤 2. 配置 API 权限
在您的新应用注册中,导航到管理 - API 权限选项卡。在配置权限部分下,选择添加权限。 在打开的对话窗口中,选择我的组织使用的 API 选项卡,然后搜索 Power Platform API。 您可能会看到几个名称与此相似的条目,因此请确保将其与 GUID 8578e004-a5c6-46e7-913e-12f58912df43 一起使用。
如果您在按 GUID 搜索时未在列表中看到 Power Platform API,可能您仍然可以访问它,但可见性未刷新。 要强制刷新,请运行以下 PowerShell 脚本:
#Install the Microsoft Entra the module
Install-Module AzureAD
Connect-AzureAD
New-AzureADServicePrincipal -AppId 8578e004-a5c6-46e7-913e-12f58912df43 -DisplayName "Power Platform API"
从这里,您必须选择所需的权限。 这些权限按命名空间分组。 在命名空间中,您将看到资源类型和操作,例如,AppManagement.ApplicationPackages.Read,它将为应用程序包提供读取权限。 有关详细信息,请参阅我们的权限参考文章。
备注
Power Platform API 仅在此时使用委托的权限。 对于使用用户上下文运行的应用程序,您可以使用 scope 参数请求委托的权限。 这些权限将登录用户的特权委托给您的应用程序,允许它在调用 Power Platform API 终结点时充当用户。
对于服务主体身份,不使用应用程序权限。 服务主体现在被视为 Power Platform 管理员,必须按照 PowerShell - 创建服务主体进行注册。
将所需权限添加到应用程序后,选择授予管理员同意完成设置。 如果您希望允许用户立即访问您的应用,而不需要交互式同意体验,这是必需的。 如果您可以支持交互式同意,我们建议按照 Microsoft 身份平台和 OAuth 2.0 授权代码流执行。
步骤 3. 配置公共客户端(可选)
如果您的应用需要代表用户读取和写入资源,您必须启用公共客户端设置。 这是 Microsoft Entra ID 接受令牌请求正文中的用户名和密码属性的唯一方式。 另请注意,如果您计划使用此功能,它不适用于启用了多重身份验证的帐户。
要启用,请访问管理 - 身份验证选项卡。在高级设置部分下,将公共客户端切换设置为是。
步骤 4. 配置证书和机密(可选)
如果您的应用本身需要读取和写入资源 - 也称为服务主体,有两种身份验证方法。 要使用证书,导航到管理 - 证书和机密选项卡。在证书部分下,上载可用于身份验证的 x509 证书。 另一种方法是使用机密部分生成客户端密码。 将密码保存在安全的位置,以在您需要自动化时使用。 证书或密码选项让您可以通过 Microsoft Entra 进行身份验证并接收此客户端的令牌,然后将其传递到 REST API 或 PowerShell cmdlet。
第 5 步。 请求访问令牌
获取访问持有者令牌的方式有两种。 一种是针对用户名和密码,另一种是针对服务主体。
用户名和密码流
请务必阅读上面的“公共客户端”一节。 然后,通过 HTTP 向 Microsoft Entra ID 发送包含用户名和密码有效负载的 POST 请求。
Content-Type: application/x-www-form-urlencoded
Host: login.microsoftonline.com
Accept: application/json
POST https://login.microsoftonline.com/YOUR_TENANT.COM/oauth2/v2.0/token
BODY:
client_id={CLIENT_ID_FROM_AZURE_CLIENT_APP}&scope=https://api.powerplatform.com/.default&username={USER_EMAIL_ADDRESS}&password={PASSWORD}&grant_type=password
上面的示例包含占位符,您可以在 Microsoft Entra ID 中从您的客户端应用程序检索这些占位符。 您将收到一个响应,它可以用于对 Power Platform API 进行后续调用。
{
"token_type": "Bearer",
"scope": "https://api.powerplatform.com/AppManagement.ApplicationPackages.Install https://api.powerplatform.com/AppManagement.ApplicationPackages.Read https://api.powerplatform.com/.default",
"expires_in": 4747,
"ext_expires_in": 4747,
"access_token": "eyJ0eXAiOiJKV1QiLCJu..."
}
在对带有授权 HTTP 标头的 Power Platform API 的后续调用中使用 access_token 值。
服务主体流
请务必阅读上面的“证书和机密”一节。 然后,通过 HTTP 向 Microsoft Entra ID 发送包含客户端密码有效负载的 POST 请求。 这通常称为服务主体身份验证。
重要提示
只有在您按照相关的 PowerShell 或 REST 文档向 Microsoft Power Platform 注册了此客户端应用程序 ID 后,才能使用此方法。
Content-Type: application/x-www-form-urlencoded
Host: login.microsoftonline.com
Accept: application/json
POST https://login.microsoftonline.com/YOUR_TENANT.COM/oauth2/v2.0/token
BODY:
client_id={CLIENT_ID_FROM_AZURE_CLIENT_APP}&scope=https://api.powerplatform.com/.default&client_secret={SECRET_FROM_AZURE_CLIENT_APP}&grant_type=client_credentials
上面的示例包含占位符,您可以在 Microsoft Entra ID 中从您的客户端应用程序检索这些占位符。 您将收到一个响应,它可以用于对 Power Platform API 进行后续调用。
{
"token_type": "Bearer",
"expires_in": 3599,
"ext_expires_in": 3599,
"access_token": "eyJ0eXAiOiJKV1..."
}
在对带有授权 HTTP 标头的 Power Platform API 的后续调用中使用 access_token 值。 如上所述,服务主体流不使用应用程序权限,而是目前被视为他们进行的所有调用的 Power Platform 管理员。