我正在做一个项目,我们有服务以用户订阅模式在 Azure Batch 上运行计算(因为我们使用的是自定义图像)。我的代码现在可以完全正常工作,但它需要每次启动都提供用户凭据以登录 Azure Active Directory 应用程序,然后才能创建批处理池等。因为它将作为后台服务运行,所以我需要使用一些提供的用户静默登录,而不会弹出要求用户登录。
我已经在 Azure 中注册了本机应用程序,并设置了它对 Azure Batch 服务的访问权限,创建了 Azure AD 用户,并从中获取了所有 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,这甚至可能吗?
感谢帮助。