无法通过 Azure Powershell 在新应用程序注册模块中设置“preAuthorizedApplications”对象

2023-12-14

简短的场景:多租户前端 javascript (React.JS) Web 应用程序从浏览器调用多租户 ASP.NET Core 2.2 WebAPI。

验证:

  1. 当用户登录时(基于用户的原始 Azure Active Directory),前端应用程序中的 ADAL.js 负责从 AzureAD1 或 AzureAD2 或 AzureAD3...获取令牌。

  2. 用户同意前端 Web 应用程序 (范围:登录并读取用户个人资料) 也委托给 WebAPI。 (这意味着用户也不需要同意 WebAPI)

  3. 前端Web App使用不记名令牌调用We​​bAPI来获取资源。

问题:我必须自动部署新环境。并相应地设置清单文件(这是一个SaaS解决方案)

  1. 在清单文件中,我需要公开客户端应用程序的 WebAPI (https://learn.microsoft.com/en-us/azure/active-directory/develop/quickstart-configure-app-expose-web-apis#expose-a-new-scope-through-the-ui)
  2. 设置“knownClientApplications”是不够的(由于先前描述的授权)
  3. 新的 v2 端点(https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-overview)有一个新的应用程序注册功能。旧版本现在称为“Legacy”,将于 2019 年 5 月开始弃用。
  4. 在Azure门户中需要公开API并将前端Web应用程序添加为“授权客户端应用程序”。

screendump

此步骤将在清单文件中添加一个新对象:

"preAuthorizedApplications": [
        {
            "appId": "guid",
            "permissionIds": [
                "guid"
            ]
        }
    ],
  1. 但仍然无法通过 PowerShell 使用! (https://learn.microsoft.com/en-us/powershell/module/azuread/set-azureadapplication?view=azureps-2.0)

如何使用 Azure PowerShell 将此“preAuthorizedApplications”部分添加到清单文件中?为什么门户网站上有,但PS上却没有?通常情况是相反的...

2019-08-05 根据答案更新:

我通过服务主体获取访问令牌:

$adTokenUrl = "https://login.microsoftonline.com/$TenantId/oauth2/token"
$resource = "https://graph.windows.net/"

$body = @{
    grant_type    = "client_credentials"
    client_id     = "$ServicePrincipalId"
    client_secret = "$ServicePrincipalKey"
    resource      = "$resource"
}

$response = Invoke-RestMethod -Method 'Post' -Uri $adTokenUrl -ContentType "application/x-www-form-urlencoded" -Body $body
$token = $response.access_token

根据文档:

服务主体应至少具有 Application.ReadWrite.OwnedBy 和大多数 Application.ReadWrite.All 权限。

我是否应该要求我们的 AAD 管理员向服务主体授予以下权限?

screendump

2019 年 8 月 5 日更新 2:服务主体已被授予上述所有突出显示的权利。

尝试1:

Step 1: 通过服务主体(要更新的 Api 应用程序的所有者)获取 access_token

$adTokenUrl = "https://login.microsoftonline.com/$(TenantId)/oauth2/token"
$resource = "https://graph.microsoft.com/"

$body = @{
    grant_type    = "client_credentials"
    client_id     = "$(ServicePrincipalId)"
    client_secret = "$(ServicePrincipalKey)"
    resource      = "$resource"
}

$response = Invoke-RestMethod -Method 'Post' -Uri $adTokenUrl -ContentType "application/x-www-form-urlencoded" -Body $body
$token = $response.access_token

第 2 步:使用此 access_token,根据 Md Farid Uddin Kiron 的建议构建我的 PATCH 请求,以及

结果:远程服务器返回错误:(403) 禁止。

2019 年 9 月 5 日更新 3:经过一些详细的解释和指导后,我让它工作并为我的 Postman 请求获取 HTTP 204。剩下的唯一一件事就是将这些步骤集成到我的管道中。

查看已接受的答案。有用。如果有人有同样的问题, 请阅读 Md Farid Uddin Kiron 的其他答案。


如果您想避免直接调用图形 API(也许您位于使用服务连接的天蓝色管道中并且无权访问凭据),您可以执行以下操作:

$AppName = << WebApp >>
$preAuthorizedApplicationsAppId = <<GUID>>

# Get the application and delegated permission to pre-authorize
$appRegistration = Get-AzureADMSApplication -Filter "displayName eq '$AppName'"
$oauth2Permission = $appRegistration.Api.OAuth2PermissionScopes | Where-Object {$_.Value -eq $AppName -and $_.Type -eq 'Admin'}

# Build a PreAuthorizedApplication object
$preAuthorizedApplication = New-Object 'Microsoft.Open.MSGraph.Model.PreAuthorizedApplication'
$preAuthorizedApplication.AppId = $preAuthorizedApplicationsAppId
$preAuthorizedApplication.DelegatedPermissionIds = @($oauth2Permission.Id)

$appRegistration.Api.PreAuthorizedApplications = New-Object 'System.Collections.Generic.List[Microsoft.Open.MSGraph.Model.PreAuthorizedApplication]'
$appRegistration.Api.PreAuthorizedApplications.Add($preAuthorizedApplication)

# Update the Application object
Set-AzureADMSApplication -ObjectId $appRegistration.Id -Api $appRegistration.Api

这个答案来自于此GitHub问题.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法通过 Azure Powershell 在新应用程序注册模块中设置“preAuthorizedApplications”对象 的相关文章

  • 来自 IOS Xcode 的 Azure 推送通知错误

    我觉得我是世界上第一个尝试让 iOS 快速与 Azure 配合使用的人 但没有太多帮助 我跟着这个创建 iOS 应用程序 https azure microsoft com en us documentation articles app
  • ADFS 2016 X-Frame-选项拒绝

    我在我的react应用程序上使用adal js 使用react adal包装器 我将应用程序配置为与我的 ADFS 2016 服务器 本地 配合使用 并且身份验证过程工作正常 但在 ADFS SSO cookie 过期后 当客户端发送更新令
  • DocumentDb GUID 索引精度

    假设我们的文档中有一个非唯一的 GUID UUID 值 id 123456 Key 117dfd49 a71d 413b a9b1 841e88db06e8 Name Kaapstad 我们只想通过平等来查询这一点 不需要范围或 order
  • Azure - 查询 2 亿个实体

    我需要查询 Windows Azure 中包含 2 亿个实体的存储 理想情况下 我希望使用表服务而不是 SQL Azure 来完成此任务 用例是这样的 包含新实体的 POST 将从面向 Web 的 API 传入 我们必须查询大约 2 亿个实
  • 两个应用程序的相同表、通知中心和服务器

    我们被微软放弃 Silverlight 并专注于 UWP 所困扰 这最终导致我们不得不开发两个双重应用程序 UWP 和 Silverlight 这使得我们有两个无法捆绑 打包在一起的应用程序 因此 我们决定将这些应用程序作为配套应用程序 这
  • 执行带有开始日期和结束日期的azure数据工厂foreach活动

    我有一个 json 文件 它包含开始日期和结束日期 我需要使用 azure 数据工厂 foreach 迭代此开始日期和结束日期 据我所知 foreach 期望项目 集合 数组 但就我而言 我只有两个项目 即开始日期和结束日期 我想运行数据工
  • 使用天蓝色错误“找不到资源”进行情绪分析

    我创建了一个 python 程序 它接受字符串作为输入并对其执行情感分析 我已经按照文档中所述创建了环境变量 并重新启动了 cmd 和 Visual Studio 但仍然出现以下错误 遇到异常 操作返回无效状态代码 未找到资源 python
  • 如何避免在附加字符串连接器逻辑应用程序中添加重复字符串

    我有以下 json 数组输入 results tableName ABC id 11 tableName ZX id 11 tableName ABC id 11 In logic app i have used in For each I
  • 在控制台应用程序中使用 SendGrid

    是否可以在 C 的控制台应用程序中使用发送网格 我的代码不起作用 我真的不知道为什么 你可以帮帮我吗 using System using System Net using System Net Mail using SendGrid na
  • 如何在 Django 中使用并发进程记录到单个文件而不使用独占锁

    给定一个在多个服务器上同时执行的 Django 应用程序 该应用程序如何记录到单个共享日志文件 在网络共享中 而不保持该文件以独占模式永久打开 当您想要利用日志流时 这种情况适用于 Windows Azure 网站上托管的 Django 应
  • HTTP按需触发azure函数多次调用自身

    我添加了http触发的azure函数并将其部署在函数应用程序中 函数应用程序仅包含一个此 http 按需触发器 azure 函数 功能应用程序有应用程序服务计划 而不是消费计划 另外 函数应用程序版本为 1 所以超时是无限的 在天蓝色的函数
  • Azure函数无法读取应用程序设置和连接字符串

    我在 Azure 中创建了一个 HTTP 触发器函数 希望从 Azure SQL 数据库读取数据 我在函数应用程序的连接字符串部分配置了连接字符串 如下图所示 我使用下面的代码尝试读取连接字符串 var cnnString Configur
  • C# 以编程方式设置 azure 函数时间触发器

    我想编写一个在时间触发器上工作的 C Azure 函数 其中计划是可变的 即每个函数运行将确定下一次运行的时间 因此应该能够更改下一个触发器的计划时间 您可以使用带有队列输出的队列触发器 这要归功于NextVisibleTime https
  • 用 Node.js 编写的 Azure Functions 可以访问连接字符串吗?

    Azure Function App 的应用程序设置包含可在门户中设置的数据库连接字符串的值 在 C 中 可以使用以下方式访问它们 ConfigurationManager ConnectionStrings ConnectionStrin
  • 工作天蓝色日志记录设置

    我尝试设置跟踪日志记录有一段时间了 但就是无法让它正常工作 关于这个主题有这么多错误 过时的文章并没有帮助 但请有人给我一个良好且实用的设置 用于 Azure 1 6 的跟踪日志记录和查看 我想要做的就是能够从我的应用程序捕获和查看跟踪消息
  • Azure Functions 中通过整数 SQL 查询 DocumentDB 不起作用

    我在 Azure Functions 中使用 JavaScript 语言 当使用 Cosmos DB 作为输入时 我无法通过整数作为变量进行查询 例如 我有以下内容 使用 Azure Cosmos DB 作为我的输入 公司 的功能设置 这是
  • 有没有办法在 Blazor 中进行外部身份验证而不使用数据库?

    所以本质上我有一个 Blazor 服务器端应用程序 我正在尝试使用 Azure AD SAML 添加外部身份验证 我在用Sustainsys Saml2 AspNetCore2用于外部身份验证的包 我不太熟悉 ASP NET 或 Blazo
  • 使用 C++ 访问 Azure blob 存储 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Windows Azure:尝试创建凭据时出现身份验证错误

    底部更新 我第一次尝试将测试应用程序上传到 Windows Azure 但在创建凭据时遇到问题 这些是我正在遵循的步骤 我在 Visual Studio 中创建凭据和证书 并将证书上传到 Azure 如下所示 在服务器资源管理器中右键单击
  • 如何使用 Azure 服务总线 HTTP API 对消息设置死信

    我正在尝试与 Azure 服务总线集成以执行代理消息传递 我之前成功地使用了托管 NET API 但这次我需要使用HTTP API 处理消息时 如果我确定消息有毒 即永远无法成功处理 我想将消息移至死信队列 在托管 API 中 我会调用Br

随机推荐