Ich versuche, ein Authentifizierungstoken vom Azure AD-System abzurufen. Ich habe eine Reihe von verschiedenen Möglichkeiten der Konfiguration der async-Methode zusammen mit dem Befehl warten versucht, aber jedes Mal, wenn ich den Fehler bekomme "Eine Aufgabe wurde abgebrochen".Azure Async-Authentifizierungstoken aus Web App
Ich habe async = "true" in meiner aspx-Seite.
Irgendwelche Ideen, was ich anders machen muss, um eine erfolgreiche Anfrage zu erhalten und das Token abzurufen.
Derselbe Code funktioniert in einer Konsolenanwendung, daher gehe ich davon aus, dass das Problem etwas mit der Art zu tun hat, wie die asynchronen Vorgänge ablaufen.
Mein Code ist wie folgt:
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 ... Meine aktualisierten Code:
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;
}
}
Welche Zeile gibt Ihnen den Fehler? Wenn Sie innerhalb 'GetToken()' debuggen, geben Sie irgendeinen dieser * catch * Blöcke ein? – Alisson
Der AcquireTokenAsync-Befehl löst die AdalException mit der inneren Nachricht aus "Eine Aufgabe wurde abgebrochen" –