CLI と REST API を使用してクライアント アプリケーションを登録する
この記事では、Azure Health Data Services にアクセスするために、Azure コマンド ライン インターフェイス (CLI) と REST API を使って、Microsoft Entra ID でクライアント アプリケーションを登録する方法について説明します。 クライアント アプリケーションの登録は Azure portal を使ってできますが、スクリプトの方法を使うと、リソースを直接テストしてデプロイできます。 詳しくは、Azure portal でのクライアント アプリケーションの登録に関する記事をご覧ください。
ステップを 1 つずつ、または組み合わせて実行することで (いくつか省略できるステップが含まれます)、機密またはパブリックのクライアント アプリケーションを作成できます。 また、変数をスクリプトの途中に置くのではなく、事前に定義することもできます。 詳しくは、Azure Health Data Services のサンプルに関するページをご覧ください。
Note
スクリプトの作成とテストは、Visual Studio Code で行います。 ただし、環境内でそれらを検証し、必要な調整を行う必要があります。 たとえば、PowerShell 環境でスクリプトを実行できますが、変数に $
記号を追加する必要があります。
Azure サブスクリプションにサインインします。
Azure にサインインする前に、環境にインストールされている az
のバージョンを調べ、必要であれば最新バージョンにアップグレードします。 また、アカウントと Azure Health Data Services 拡張機能がインストールされていることを確認します。
az --version
az extension add --name account
az extension add --name healthcareapis
az provider register --namespace 'Microsoft.HealthcareApis'
az provider show --namespace Microsoft.HealthcareApis --query "resourceTypes[?resourceType=='services'].locations"
CLI の login コマンドを使って Azure にサインインし、既定で使われる Azure サブスクリプションとテナントの一覧を表示できます。 詳しくは、既定のサブスクリプションの変更に関する記事をご覧ください。 特定のテナントにサインインする方法について詳しくは、Azure のログインに関する記事をご覧ください。
az login
az account show --output table
クライアント アプリケーションを作成する
CLI コマンドを使って、機密クライアント アプリケーションの登録を作成できます。 実際のスクリプトでは、表示名 "myappregtest1" を変更する必要があります。
az ad app create --display-name myappregtest1
実際には、変数を定義し、それに値を割り当てて、クライアント アプリ ID とオブジェクト ID への参照を設定します。以降の手順では、この方法が使われています。
### Define app registration name, etc.
appregname=myappregtest1
clientid=$(az ad app create --display-name $appregname --query appId --output tsv)
objectid=$(az ad app show --id $clientid --query Id --output tsv)
echo $<variable name>
を使って、指定した変数の値を表示できます。
echo $clientid
user_impersonation スコープを削除する
現在の形式の az ad app create
コマンドでは、アプリケーションを API として公開するための user_impersonation
スコープが追加されます。 Azure portal のアプリケーションの登録で [API の公開] ブレードを選ぶことで、この設定を表示できます。 ほとんどの場合、このスコープは必要ありません。 したがって、削除してもかまいません。
###Remove api permissions: disable default exposed scope first
default_scope=$(az ad app show --id $clientid | jq '.oauth2Permissions[0].isEnabled = false' | jq -r '.oauth2Permissions')
az ad app update --id $clientid --set oauth2Permissions="$default_scope"
az ad app update --id $clientid --set oauth2Permissions="[]"
az rest
を使うと、user_impersonation スコープを作成せずに、Azure Graph ではなく Microsoft Graph を直接呼び出すことができます。 アプリケーション ID を取得するには、query パラメーターを使います。
az rest -m post -u https://graph.microsoft.com/v1.0/applications --headers 'Content-Type=application/json' --body '{"displayName": "xxx"}'
### Use --query to obtain the client app id
clientid=$(az rest -m post -u https://graph.microsoft.com/v1.0/applications --headers 'Content-Type=application/json' --body '{"displayName": "myappregtest1"}' --query appId --output tsv)
機密クライアント アプリケーションにクライアント シークレットを追加する
機密のクライアント アプリケーションの場合は、クライアント シークレットを追加する必要があります。 パブリック クライアント アプリケーションの場合は、この手順をスキップできます。
シークレットの名前を選び、有効期限を指定します。 既定では 1 年ですが、--end-date
オプションを使って期間を指定できます。 クライアント シークレットは変数に保存され、echo コマンドを使って表示できます。 ポータルでは表示されないので、記録しておいてください。 デプロイ スクリプトでは、Azure Key Vault に値を保存して格納し、定期的にローテーションできます。
###Add client secret with expiration. The default is one year.
clientsecretname=mycert2
clientsecretduration=2
clientsecret=$(az ad app credential reset --id $clientid --append --display-name $clientsecretname --years $clientsecretduration --query password --output tsv)
echo $clientsecret
パブリック クライアント アプリケーションのフラグを変更する
パブリック クライアント アプリケーションの場合は、[パブリック クライアント フローを許可する] フラグを [はい] に変更します。 機密クライアント アプリケーションの場合は、このステップをスキップします。
###Optionally, change the app registration from confidential to public
az ad app update --id $clientid --set publicClient=true
リダイレクト URL を追加する
リダイレクト URL の追加は省略可能なステップです。 --reply-urls
を使って、Web アプリに 1 つ以上の応答 (またはリダイレクト) URL を追加できます。 ただし、パラメーターでアプリケーションまたはプラットフォームの種類を指定することはできません。
シングルページ アプリ、モバイル、デスクトップのアプリケーションの場合は、代わりに REST API を使って、アプリケーションまたはプラットフォームの種類を指定します。
###Update app registration using REST. az ad supports reply-urls only.
#https://github.com/Azure/azure-cli/issues/9501
#redirecttype=spa | web | publicClient
redirecttype=publicClient
redirecturl=https://www.getpostman.com/oauth2/callback
graphurl=https://graph.microsoft.com/v1.0/applications/$objectid
az rest --method PATCH --uri $graphurl --headers 'Content-Type=application/json' --body '{"'$redirecttype'":{"redirectUris":["'$redirecturl'"]}}'
iOS/macOS と Android アプリケーションについて詳しくは、GitHub をご覧ください。
サービス プリンシパルの作成
アプリケーション登録プロセスを完了するには、クライアント アプリケーション用のサービス プリンシパルを作成する必要があります。 サービス プリンシパルは、アクセス許可 (またはロールの割り当て) をクライアント アプリケーションに付与するために使われます。
###Create an AAD service principal
spid=$(az ad sp create --id $clientid --query objectId --output tsv)
###Look up a service principal
spid=$(az ad sp show --id $clientid --query objectId --output tsv)
マニフェストを確認する
マニフェストの確認のステップは省略できます。 クライアント アプリケーションの詳細またはマニフェストを表示してダウンロードできます。
az ad app list --app-id $clientid
CLI と REST API を使ったアプリケーションの登録が完了したので、クライアント アプリケーションのサービス プリンシパルにアクセス許可を付与するか、ロールを割り当て、Web またはモバイル アプリケーションではクライアント アプリケーションの資格情報を使う必要があります。
次のステップ
この記事では、CLI と REST API を使って Microsoft Entra ID でクライアント アプリケーションを登録する方法について説明しました。 Azure Health Data Services に対するアクセス許可を付与する方法については、次をご覧ください
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示