web-dev-qa-db-ja.com

プログラムでAzure ADにアプリケーションを追加する方法は?

Azure ADでのアプリケーションの作成を自動化し、Azure ADによって生成されたクライアントIDを取得したいです。

これを行うPowerShellコマンドレットはありますか?管理コンソール以外にこれを行うAPIのような他の手段はありますか?

例を挙げていただけますか?

ありがとう!

27
Eric

プログラムでAADにアプリケーションを作成する方法はいくつかあります。これを行うための2つの異なる方法、PowerShell CMDLETとGraph APIについて簡単に説明します。一般的に、このためにGraph APIを使用することを強くお勧めします。

PowerShell:

AADアプリケーション/サービスプリンシパルを作成する機能を持ついくつかの異なるモジュールが実行されています。テナントで新しいアプリケーションオブジェクトを作成する必要がある場合、Azure PowerShellを使用して次の呼び出しを行うことができます。

https://msdn.Microsoft.com/en-us/library/mt603747.aspx

PS 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.aspx

New-MsolServicePrincipal -ServicePrincipalNames @("MyApp/Contoso.com") -DisplayName "My Application"

Graph API:(推奨)

Graph APIに対してPOSTを作成してアプリケーションを作成することもできます。 https://msdn.Microsoft.com/Library/Azure/Ad/Graph/api/entity-and -complex-type-reference#ApplicationEntity

Graph APIを対象とするアプリケーションを登録および作成し、Graph Client Libraryを使用してAPIを正しく呼び出す方法を示すサンプルを用意しています。

https://github.com/AzureADSamples/WebApp-GraphAPI-DotNet

これがお役に立てば幸いです!

40
Shawn Tabrizi

私はパーティーに少し遅れましたが、最近、この挑戦​​にも出会いました。ここに私のソリューションからの関連する抜粋があります...

まず、認証トークンを取得する必要があります。このために、この便利な機能を使用できます。

function GetAuthToken
{
       param
       (
              [Parameter(Mandatory=$true)]
              $TenantName
       )

       $adal = "${env:ProgramFiles(x86)}\Microsoft SDKs\Azure\PowerShell\ServiceManagement\Azure\Services\Microsoft.IdentityModel.Clients.ActiveDirectory.dll"

       $adalforms = "${env:ProgramFiles(x86)}\Microsoft SDKs\Azure\PowerShell\ServiceManagement\Azure\Services\Microsoft.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'[email protected]($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

これが誰かの助けになることを願っています!

4
matt-ankerson

マイクロソフトは、アプリを登録して資格情報を設定するためのいくつかの追加のPowerShellコマンドレットをリリースしました。

New-AzureRmADApplication
New-AzureRmADServicePrincipal
New-AzureRmRoleAssignment 
Add-AzureADApplicationCredential 

ドキュメントを確認してください: https://docs.Microsoft.com/en-us/Azure/azure-resource-manager/resource-group-authenticate-service-principal

2
Carl in 't Veld

私はいくつかのPowerShellを書いています scripts これは

  • AADアプリケーションの作成(主に Matt's answerに感謝)
  • AzureでKey Vaultを作成する
  • Key Vaultでキーを作成します
  • AADアプリケーションのKey Vaultにアクセス許可を割り当てます

私はこれがあなたが求めているものよりも多いことを知っていますが、私のように、秘密(キー)を取り戻すことに興味があるならアプリケーション(ポータルに追加したものと同じものを再度表示する前にコピーする必要があります)から second スクリプトを使用すると、ペイロードの一部として明示的に送信できますGraph APIを呼び出します。スクリプトは、後で参照できるようにファイルに保存します。

他のスクリプトは、実際にあなたが求めているものではありませんが、TDEまたは列レベルの暗号化のためにAzure Key Vaultと連携するようにSQL Serverをセットアップする必要がある場合、それらは依然として有用であると感じるかもしれません。

0
bjh1977