次のコードを使用して、Azure AD 認証のトークンを取得しています
errorMessage = "";
AuthenticationResult result = null;
var context = new AuthenticationContext(String.Format(CultureInfo.InvariantCulture, ConfigurationManager.AppSettings["login"], ConfigurationManager.AppSettings["tenantId"]),false);
ClientCredential clientCredential = new ClientCredential(ConfigurationManager.AppSettings["clientId"], ConfigurationManager.AppSettings["key"]);
try
{
result = context.AcquireToken(ConfigurationManager.AppSettings["apiEndpoint"], clientCredential);
}
catch (AdalException ex)
{
if (ex.ErrorCode == "temporarily_unavailable")
{
errorMessage = "Temporarily Unavailable";
return null;
}
else
{
errorMessage = "Unknown Error";
return null;
}
}
string token = result.AccessToken;
var credential = new TokenCloudCredentials(ConfigurationManager.AppSettings["subscriptionId"],token);
//string certificateString = ConfigurationManager.AppSettings["managementCertificate"];
//var cert = new X509Certificate2(Convert.FromBase64String(base64cer));
return credential;
その後、Azure で Web サイトを作成する次の作業を行っています。
using (var computeClient = new WebSiteManagementClient(credentials))
{
var result = computeClient.WebSites.IsHostnameAvailable(websiteName);
if (result.IsAvailable)
{
await computeClient.WebSites.CreateAsync(WebSpaceNames.WestEuropeWebSpace, new WebSiteCreateParameters() {
Name= websiteName,
ServerFarm= ConfigurationManager.AppSettings["servicePlanName"]
});
}
else
{
return ResultCodes.ObjectNameAlreadyUsed;
}
}
しかし、実行するたびに次のエラーが発生しました。
ForbiddenError: サーバーは要求を認証できませんでした。証明書が有効であり、このサブスクリプションに関連付けられていることを確認してください。
ここで言ったように、管理証明書をインポートしようとしました: https://www.simple-talk.com/cloud/security-and-compliance/windows-azure-management-certificates/
また、これを試してみました: http://technetlibrary.com/change-windows-azure-subscription-azure-powershell/198
管理証明書のインポート用。
また、管理 API にアクセスするためのアクセス許可をアプリケーションに与えました。