Azure ADシステムから認証トークンを取得しようとしています。私はawaitコマンドと一緒に非同期メソッドを設定するさまざまな方法を試しましたが、 "タスクがキャンセルされました"というエラーが出るたびに試しました。Web AppのAzure非同期認証トークン
aspxページでasync = "true"を取得しました。
トークンを正常に取得して取得するために、私が別のやり方で行う必要があるアイディア。
同じコードがコンソールアプリケーションで動作するため、問題は非同期操作の処理方法と関係していると考えています。次のように
私のコードは次のとおりです。
protected async void Login_click(object sender, EventArgs e)
{
response1.Text = "Started";
var tentantID = ConfigurationManager.AppSettings["tenantID"];
var clientId = ConfigurationManager.AppSettings["applicationID"];
var secret = ConfigurationManager.AppSettings["secret"];
await Authorize(tentantID , clientId, secret);
}
private async Task<AuthenticationResult> GetToken(string clientId, string tenantDomain, string clientSecret)
{
AuthenticationResult result = null;
var context = new AuthenticationContext("https://login.microsoftonline.com/" + tenantDomain);
try
{
ClientCredential clientCredential = new ClientCredential(clientId, clientSecret);
return result = await context.AcquireTokenAsync("https://management.core.windows.net/", clientCredential).ConfigureAwait(false);
}
catch (AdalException ae)
{
//Error code
return null;
}
catch (Exception e)
{
//Error code
return null;
}
}
private async Task Authorize(string tenant, string clientId, string clientSecret)
{
var authenticationResult = await GetToken(clientId, tenant, clientSecret).ConfigureAwait(false);
string token = authenticationResult.AccessToken;
}
EDIT ... 私の更新されたコード:ASP.NETでの
protected void Login_click(object sender, EventArgs e)
{
response1.Text = "Started";
RegisterAsyncTask(new PageAsyncTask(Authorize));
}
public async Task Authorize()
{
var tentantID = ConfigurationManager.AppSettings["tenantID"];
var clientId = ConfigurationManager.AppSettings["applicationID"];
string myKey = ConfigurationManager.AppSettings["myKey"];
var tenantDomain = ConfigurationManager.AppSettings["tenantDomain"];
var context = new AuthenticationContext("https://login.microsoftonline.com/" + tenantDomain, false);
try
{
ClientCredential clientCredential = new ClientCredential(clientId, myKey);
var result = context.AcquireTokenAsync("https://management.core.windows.net/", clientCredential).ConfigureAwait(false);
AuthenticationResult resVal = await result;
token = resVal.AccessToken;
}
catch (AdalException ae)
{
//error code
token = ae.InnerException.Message;
}
}
どの行でエラーが表示されますか? 'GetToken()'の中でデバッグすると、* catch *ブロックのどれかを入力しますか? – Alisson
AcquireTokenAsyncコマンドは、内部メッセージ「A Task was cancelled」でAdalExceptionをスローします。 –