2017-07-11 8 views
0

Wir haben die ADAL-Authentifizierung mit dem Dependency-Dienst in Xamarin Forms implementiert. Wir sind auf ein merkwürdiges Problem gestoßen: Wenn das Passwort des Benutzers kürzlich geändert wurde, können sie das Zugriffstoken nicht mehr in ihrer Client-App abrufen.ADAL-Authentifizierungsproblem - Xamarin-Formulare

Es wird erwartet, dass der Benutzer aufgefordert wird, die neuesten Anmeldeinformationen zu aktualisieren, um das aktualisierte Zugriffstoken zu erhalten. Aber das scheint nicht zu funktionieren.

-Code für UWP:

[assembly: Dependency(typeof(SampleApp.UWP.Helper.Authenticator))] 

Namespace SampleApp.UWP.Helper { Klasse Authenticator: IAuthenticator {

public string ReturnUri = Windows.Security.Authentication.Web.WebAuthenticationBroker.GetCurrentApplicationCallbackUri().ToString(); 
    public async System.Threading.Tasks.Task<AuthenticationResult> Authenticate(string authority, string resource, string clientId, string returnUri=null) 
    { 
     var authContext = new AuthenticationContext(authority); 
     var authResult = await authContext.AcquireTokenAsync(resource, clientId, new Uri(ReturnUri), 
      new PlatformParameters(PromptBehavior.Auto,true)); 
     return authResult; 
    } 
} 

}

Danke, Karthik

+0

Was läuft eigentlich schief? Erhalten Sie einen Fehler? Sie haben keinen tatsächlichen Fehler oder ein Problem neben der Tatsache, dass dieser Codeabschnitt "nicht funktioniert". Höchstwahrscheinlich werden Menschen mehr Informationen benötigen, wie eine Fehlerbeschreibung oder ein Fehlerverhalten, um helfen zu können. –

Antwort

0

Wenn Sie feststellen, dass das Token nicht vorhanden ist (Sie tun das jedoch), melden Sie sie ab, nachdem Sie "notoken" erhalten haben.

using Microsoft.IdentityModel.Clients.ActiveDirectory; 
using Windows.Web.Http; 
using Windows.Web.Http.Filters; 

    public void Logout(AuthenticationContext authContext) 
    { 
     var filter = new HttpBaseProtocolFilter(); 
     filter.ClearAuthenticationCache(); 
     AuthContextHelper.AuthContext.TokenCache.Clear(); 
     HttpCookieCollection myCookies = filter.CookieManager.GetCookies(new System.Uri(Constants.authority)); 
     foreach (HttpCookie cookie in myCookies) 
     { 
      filter.CookieManager.DeleteCookie(cookie); 
     } 
    }