我想在Azure AD中自动创建我的应用程序,并获得由Azure AD生成的客户端id。
有PowerShell命令来做这个吗?除了管理控制台之外,是否还有其他方法(如API)来完成此操作?
你能给我举个例子吗?
谢谢!
有许多方法可以在AAD中以编程方式创建应用程序。我将简要介绍两种不同的方法:PowerShell cmdlet和Graph API。一般来说,我强烈建议使用Graph API。
PowerShell:
有几个不同的模块可以创建AAD应用程序/服务主体。如果需要在租户中创建新的应用程序对象,可以使用Azure PowerShell进行以下调用:
https://msdn.microsoft.com/en-us/library/mt603747.aspxPS C:> New-AzureRmADApplication -DisplayName "NewApplication" -HomePage "http://www.Contoso.com" -IdentifierUris "http://NewApplication"
如果您需要在租户中为应用程序创建服务主体,您可以使用Azure AD PowerShell:
https://msdn.microsoft.com/en-us/library/azure/jj151815.aspx https://msdn.microsoft.com/en-us/library/azure/dn194119.aspxNew-MsolServicePrincipal -ServicePrincipalNames @("MyApp/Contoso.com") -DisplayName "My Application"
图形API: (推荐)
你也可以通过POST来创建应用程序到我们的图形API:https://msdn.microsoft.com/Library/Azure/Ad/Graph/api/entity-and-complex-type-reference ApplicationEntity
我们有一些示例,展示了如何注册和创建一个应用程序来瞄准图形API,并使用图形客户端库来帮助您对API进行正确的调用:
https://github.com/AzureADSamples/WebApp-GraphAPI-DotNet我希望这对你有帮助!
我有点晚了,但我最近也遇到了这个挑战。以下是我的解决方案的相关节选…
首先需要获得身份验证令牌。为此,您可以使用这个方便的函数。
function GetAuthToken
{
param
(
[Parameter(Mandatory=$true)]
$TenantName
)
$adal = "${env:ProgramFiles(x86)}Microsoft SDKsAzurePowerShellServiceManagementAzureServicesMicrosoft.IdentityModel.Clients.ActiveDirectory.dll"
$adalforms = "${env:ProgramFiles(x86)}Microsoft SDKsAzurePowerShellServiceManagementAzureServicesMicrosoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll"
[System.Reflection.Assembly]::LoadFrom($adal) | Out-Null
[System.Reflection.Assembly]::LoadFrom($adalforms) | Out-Null
$clientId = "1950a258-227b-4e31-a9cf-717495945fc2"
$redirectUri = "urn:ietf:wg:oauth:2.0:oob"
$resourceAppIdURI = "https://graph.windows.net"
$authority = "https://login.windows.net/$TenantName"
$authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" -ArgumentList $authority
$authResult = $authContext.AcquireToken($resourceAppIdURI, $clientId,$redirectUri, "Auto")
return $authResult
}
(借用自Paulo Marques https://blogs.technet.microsoft.com/paulomarques/2016/03/21/working-with-azure-active-directory-graph-api-from-powershell/)
然后你可以向Azure Active Directory Graph API提交POST请求以创建你的应用程序。但是需要做一些设置。
# The name of this AAD instance
$global:tenant = "mycompany.onmicorosft.com"
$global:aadSecretGuid = New-Guid
$global:aadDisplayName = "azure-ad-displayname"
$global:aadIdentifierUris = @("https://contoso.com")
$guidBytes = [System.Text.Encoding]::UTF8.GetBytes($global:aadSecretGuid)
$global:aadSecret = @{
'type'='Symmetric';
'usage'='Verify';
'endDate'=[DateTime]::UtcNow.AddDays(365).ToString('u').Replace(' ', 'T');
'keyId'=$global:aadSecretGuid;
'startDate'=[DateTime]::UtcNow.AddDays(-1).ToString('u').Replace(' ', 'T');
'value'=[System.Convert]::ToBase64String($guidBytes);
}
# ADAL JSON token - necessary for making requests to Graph API
$global:token = GetAuthToken -TenantName $global:tenant
# REST API header with auth token
$global:authHeader = @{
'Content-Type'='application/json';
'Authorization'=$global:token.CreateAuthorizationHeader()
}
现在你可以点击图形API
$resource = "applications"
$payload = @{
'displayName'=$global:aadDisplayName;
'homepage'='https://www.contoso.com';
'identifierUris'= $global:aadIdentifierUris;
'keyCredentials'=@($global:aadSecret)
}
$payload = ConvertTo-Json -InputObject $payload
$uri = "https://graph.windows.net/$($global:tenant)/$($resource)?api-version=1.6"
$result = (Invoke-RestMethod -Uri $uri -Headers $global:authHeader -Body $payload -Method POST -Verbose).value
一旦响应返回,您就可以提取所需的配置值。
# Extract configuration values
$keyObject = foreach($i in $result.keyCredentials) { $i }
# Tenant ID
$global:aadTenantId = Get-AzureRmSubscription | Select-Object -ExpandProperty TenantId
# Application object ID
$global:aadApplicationObjectId = $result | Select-Object -ExpandProperty objectId
# App ID / Client ID
$global:aadClientId = $result | Select-Object -ExpandProperty appId
# Application Secret/Key
$global:aadAppSecret = $keyObject | Select-Object -ExpandProperty keyId
我希望这对某人有所帮助!
微软发布了两个额外的PowerShell cmdlet来注册应用程序和设置凭据:
New-AzureRmADApplication
New-AzureRmADServicePrincipal
New-AzureRmRoleAssignment
Add-AzureADApplicationCredential
请查看他们的文档:https://learn.microsoft.com/en-us/azure/azure-resource-manager/resource-group-authenticate-service-principal
我写了一些powershell脚本
- 创建AAD应用程序(主要感谢Matt的回答)
- 在Azure中创建密钥库
- 在key Vault中创建密钥
- 为AAD应用程序分配密钥库权限
我知道这比你想要的更多,但是如果,像我一样,你有兴趣从应用程序中获得秘密(又名密钥)(你在门户中添加的那个,你必须在再也看不到它之前复制它),那么第二个脚本将允许你显式地将其作为有效载荷的一部分发送到图形API调用中。脚本将把它保存到一个文件中,供您以后参考。
其他脚本并不是你真正想要的,但是如果你需要设置SQL Server来使用Azure密钥库进行TDE或列级加密,你可能仍然会发现它们很有用。