私はAzure Batchでユーザーサブスクリプションモードで計算を実行するサービスを提供しています(カスタムイメージを使用しているため)。私のコードは完全に動作していますが、バッチプールなどを作成する前にAzure Active Directoryアプリにログインするためのユーザー資格情報を提供するためには、すべての起動が必要です。バックグラウンドサービスとして実行されるので、私は何人かのユーザーと一緒にサインインして、ログインするように要求します。ユーザ登録Azure Batchにアクセストークンを自動的に取得する方法
私はAzureにネイティブアプリを登録し、Azureバッチサービスへのアクセスを設定しました。それからすべてのIDと名前を得ました。
ここに私のコードは、私は今使用しています。
private const string AuthorityUri = "https://login.microsoftonline.com/common";
private const string BatchResourceUri = "https://batch.core.windows.net";
private const string BatchAccountEndpoint = "https://<BATCH SERVICE NAME>.westeurope.batch.azure.com";
private const string ClientId = "<AZURE APP GUID ID>";
...
public static async Task<string> GetAuthenticationTokenAsync()
{
var authContext = new AuthenticationContext(AuthorityUri);
//here it will throw exception about no token found in cache and to call AquireToken
var authResult = await authContext.AcquireTokenSilentAsync(BatchResourceUri, ClientId, new UserIdentifier("<AD USER GUID ID>", UserIdentifierType.UniqueId));
//this works fine, but show popup dialog for login
/*var authResult = await authContext.AcquireTokenAsync(BatchResourceUri,
ClientId,
new Uri(RedirectUri),
new PlatformParameters(PromptBehavior.Auto));*/
return authResult.AccessToken;
}
...
Func<Task<string>> tokenProvider =() => GetAuthenticationTokenAsync();
using (BatchClient batchClient = await BatchClient.OpenAsync(new BatchTokenCredentials(BatchAccountEndpoint, tokenProvider)))
{
...
}
ログイン用のポップアップを備えたAquireTokenの古典的なやり方はうまくいきます。私はAquireTokenSilent(コードで示されているように)を使用しようとしましたが、トークンキャッシュについてのエラーが発生し、AquireTokenを呼び出す必要があります。
UserIdentifierで使用されるIDは、Azure Active Directoryユーザブレードから取得されたユーザID guidです。
私のコードを更新する方法を知っている人はいますか?私はAzure Batchを指定されたユーザーにサイレントログインさせることができますし、これも可能ですか?
ありがとうございました。
または[アプリケーションとサービスプリンシパルのクライアント秘密/認証キー]の3番目のオプション(https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create) -service-principal-portal)を指定します。 [AcquireTokenAsync](https://msdn.microsoft.com/en-us/library/microsoft.identitymodel.clients.activedirectory.clientcredential.aspx)クラスの[ClientCredential](https://msdn.microsoft.com/)を使用します。 ja-jp/library/microsoft.identitymodel.clients.activedirectory.authenticationcontext.aspx)。 – fpark
@fparkそれはオプションでもあります。 – RasmusW
ありがとう、私が必要とするUserPasswordCredentialsが動作します。 – Daniel