C# で Azure Functions の CORS にドメインを登録


Azure SDK for .NET を使用して C# で Azure Functions の CORS にドメインを登録する方法をまとめます。

事前準備

CORS の登録処理の認証に使用する AAD のアプリを用意し、クライアント ID、クライアントシークレット、テナント ID を取得しておきます。

AAD のアプリは CORS 登録対象の Azure Functions か、Azure Functions のリソースグループにロールを割り当てておきます。
今回はリソースグループに「共同作成者」でロールを割り当てました。

次に、CORS の登録対象の Azure Functions のサブスクリプション ID を取得しておきます。

AAD アプリの情報、サブスクリプション ID を変数に設定しておきます。

var clientId = "{AAD アプリのクライアント ID}";
var clientSecret = "{AAD アプリのクライアントシークレット}";
var tenantId = "{AAD アプリのテナント ID}";
var subscriptionId = "{CORS の登録対象の Azure Functions のサブスクリプション ID}";

資格情報の作成

Nuget より Microsoft.Azure.Management.ResourceManager.Fluent をインストールします。

AAD のアプリの clientId, clientSecret, tenantId を使用して資格情報を作成します。

// credential の作成
var credentials = SdkContext.AzureCredentialsFactory
    .FromServicePrincipal(clientId, clientSecret, tenantId, AzureEnvironment.AzureGlobalCloud);

Azure SDK for .NET のリファレンスはこちら

Azure オブジェクトの作成

Nuget より Microsoft.Azure.Management.Fluent をインストールします。

資格情報で作成した AzureCredentials オブジェクトと、サブスクリプション ID を使用して CORS を操作するための Azure オブジェクトを作成します。

// Azure オブジェクトの作成
var azure = Microsoft.Azure.Management.Fluent.Azure
            .Configure()
            .Authenticate(credentials)
            .WithSubscription(subscriptionId);

Azure SDK for .NET のリファレンス

CORS 一覧取得

リソースグループ名、FunctionApp 名を元に更新対象の FunctionApp の CORS の一覧を取得します。

CORS 一覧は IList<string> 型で取得されます。

var functionAppName = "{CORS 登録対象の Azure Functions}";
var resourceGroupName = "{CORS 登録対象の Azure Functions のリソースグループ名}";

// WebApps の config を取得
var siteConfig = (await azure.WebApps.Inner.GetConfigurationWithHttpMessagesAsync(resourceGroupName, functionAppName)).Body;
// config から CORS の一覧を取得
var corsList = siteConfig.Cors.AllowedOrigins;

Azure SDK for .NET のリファレンスはこちら

CORS の登録

CORS の一覧に登録するドメインを追加し、WebApps の config を更新することで FunctionApp の CORS にドメインを登録することができます。

// COSR の一覧に登録するドメインを追加
var additionalDomain = "{登録するドメイン}";
corsList.Add(additionalDomain);

// CORS の一覧を設定
var newSiteConfig = new SiteConfigResourceInner() { Cors = new CorsSettings() };
newSiteConfig.Cors.AllowedOrigins = corsList;

// WebApps の config を更新
await azure.WebApps.Inner.CreateOrUpdateConfigurationWithHttpMessagesAsync(resourceGroupName, functionAppName, newSiteConfig);

Azure SDK for .NET のリファレンスはこちら