如何用PowerShell创建Azure应用注册并配置API范围及关联客户端应用
解决Entra ID应用注册与API权限配置的PowerShell脚本
以下是完成你需求的完整PowerShell脚本,针对你遇到的API范围配置问题,会重点说明参数对应关系与实现逻辑:
1. 交互式登录Entra ID(支持MFA)
Connect-AzAccount -Interactive
该命令会弹出交互式登录窗口,原生支持MFA验证。
2. 创建单租户服务器应用并暴露API范围
核心解决你困惑的api://标识符与API范围配置问题:
# 创建单租户服务器应用注册,指定api://格式的应用程序ID URI $serverApp = New-AzADApplication -DisplayName "Connection (Server, Test)" ` -SignInAudience "AzureADMyOrg" ` -IdentifierUris "api://$((New-Guid).Guid)" # 定义API范围参数:对应门户操作里的范围配置 $apiScope = @{ Id = (New-Guid).Guid # 范围的唯一ID,对应门户中API范围的"ID"字段 Value = "API.Access" # 范围名称,即你需要的"API.Access" Type = "User" # 设为User同时支持管理员、用户同意;仅管理员同意可设为"Admin" AdminConsentDisplayName = "访问服务器测试API" AdminConsentDescription = "授予对服务器测试API的访问权限" UserConsentDisplayName = "访问服务器测试API" UserConsentDescription = "授予对服务器测试API的访问权限" IsEnabled = $true } # 更新服务器应用,添加定义好的API范围 Set-AzADApplication -ApplicationId $serverApp.ApplicationId ` -OAuth2PermissionScope $apiScope
IdentifierUris就是门户中"API"标签下的应用程序ID URI,格式为api://<唯一标识>OAuth2PermissionScope里的Id是该API范围的唯一标识符,Type控制同意权限类型
3. 创建单租户客户端应用并生成24个月密钥
# 等待10秒确保服务器应用配置生效 Start-Sleep -Seconds 10 # 创建单租户客户端应用注册 $clientApp = New-AzADApplication -DisplayName "Connection (Client, Test)" ` -SignInAudience "AzureADMyOrg" # 生成有效期24个月的客户端密钥 $startDate = Get-Date $endDate = $startDate.AddMonths(24) $clientSecret = New-AzADAppCredential -ApplicationId $clientApp.ApplicationId ` -StartDate $startDate ` -EndDate $endDate # 注意:密钥仅在此处显示一次,请妥善保存 Write-Host "客户端应用密钥:$($clientSecret.SecretText)"
4. 将客户端应用关联到服务器应用的授权范围
解决Add-AzADAppPermission的参数对应问题:
# 获取服务器应用的API范围ID $serverAppScopes = Get-AzADApplication -ApplicationId $serverApp.ApplicationId | Select-Object -ExpandProperty OAuth2PermissionScope $targetScopeId = $serverAppScopes | Where-Object { $_.Value -eq "API.Access" } | Select-Object -ExpandProperty Id # 给客户端应用添加服务器API权限 New-AzADAppPermission -ApplicationId $clientApp.ApplicationId ` -PermissionId $targetScopeId ` # 对应API范围的唯一ID -PermissionType "Scope" ` # 类型为Scope,表示是API范围权限 -ResourceId $serverApp.ClientId # 对应服务器应用的"应用程序(客户端)ID" # 授予管理员同意(需当前账号有管理员权限) Grant-AzADAppPermission -ApplicationId $clientApp.ApplicationId ` -PermissionId $targetScopeId ` -PermissionType "Scope" ` -ResourceId $serverApp.ClientId
5. 配置客户端应用的Web重定向URI与隐式流
# 替换为你的实际Web重定向URI $redirectUris = @("https://localhost:5001/signin-oidc") # 启用隐式流的访问令牌和ID令牌 $oauthSettings = @{ ImplicitGrant = @{ EnableIdTokenIssuance = $true EnableAccessTokenIssuance = $true } } # 更新客户端应用配置 Set-AzADApplication -ApplicationId $clientApp.ApplicationId ` -Web @{ RedirectUri = $redirectUris } ` -OAuth2PermissionGrant $oauthSettings
内容的提问来源于stack exchange,提问作者lostmary257
相关产品推荐
相关产品推荐

