2017-07-11 3 views
0

Nous avons implémenté l'authentification ADAL en utilisant le service Dépendance dans Xamarin Forms. Nous avons rencontré un problème étrange, lorsque le mot de passe de l'utilisateur est récemment modifié, ils ne sont pas en mesure d'obtenir le jeton d'accès dans leur application cliente.Problème d'authentification ADAL - Xamarin Forms

L'attente est d'inviter l'utilisateur à mettre à jour les informations d'identification les plus récentes, afin d'obtenir le jeton d'accès actualisé. Mais cela ne semble pas fonctionner.

code

pour UWP:

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

SampleApp.UWP.Helper { classe 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; 
    } 
} 

}

Merci, Karthik

+0

Qu'est-ce qui ne va pas? Avez-vous une erreur? Vous n'avez pas fourni une erreur ou un problème réel en plus du fait que ce morceau de code "ne fonctionne pas". Les personnes les plus susceptibles auront besoin de plus d'informations telles qu'une description d'erreur ou un comportement d'erreur pour être en mesure d'aider. –

Répondre

0

Si vous constatez que le jeton n'est pas présent (quelle que soit la manière dont vous le faites), déconnectez-le après avoir reçu 'notoken'.

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); 
     } 
    }