yst*_*van 4 azure azure-powershell azure-active-directory adal.js
简短场景:多租户前端 javascript (React.JS) Web 应用程序从浏览器调用多租户 ASP.NET Core 2.2 WebAPI。
验证:
当用户登录时(基于用户的原始 Azure Active Directory),前端应用程序中的 ADAL.js 负责从 AzureAD1 或 AzureAD2 或 AzureAD3...获取令牌。
用户同意前端 Web 应用程序(范围:登录并读取用户配置文件),该应用程序也委托给 WebAPI。(这意味着用户也不需要同意 WebAPI)
前端Web App使用不记名令牌调用WebAPI来获取资源。
问题:我必须自动部署新环境。并相应地设置清单文件(这是一个SaaS解决方案)

此步骤将在清单文件中添加一个新对象:
"preAuthorizedApplications": [
{
"appId": "guid",
"permissionIds": [
"guid"
]
}
],
Run Code Online (Sandbox Code Playgroud)
如何使用 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
Run Code Online (Sandbox Code Playgroud)
根据文档: https: //learn.microsoft.com/en-us/graph/api/application-update? view=graph-rest-beta&tabs=cs
服务主体应至少具有 Application.ReadWrite.OwnedBy 和大多数 Application.ReadWrite.All 权限。
我是否应该要求我们的 AAD 管理员向服务主体授予以下权限?

2019 年 8 月 5 日更新 2:服务主体已被授予上述所有突出显示的权利。
尝试1:
第 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
Run Code Online (Sandbox Code Playgroud)
第 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
Run Code Online (Sandbox Code Playgroud)
这个答案来自这个GitHub问题。
| 归档时间: |
|
| 查看次数: |
4564 次 |
| 最近记录: |