2013-02-13 5 views
1

J'ai une webrole Azure qui nécessite l'authentification ACSv2 à laquelle je souhaite accéder à partir d'une application WinForms. Beaucoup de mes clients utilisent Windows XP donc je ne peux pas utiliser le WIF (qui n'est pas disponible sur Windows XP). Quel est le meilleur moyen d'obtenir un jeton d'authentification pour ma demande Web dans ce cas?Accès à Azure à partir de Winforms

Répondre

1

Pour les applications de bureau, vous pouvez effectuer les opérations suivantes:

  1. obtenir la liste des fournisseurs d'identité de votre espace de noms ACS
  2. Afficher ces derniers dans un contrôle WebBrowser
  3. Après les journaux d'un utilisateur, obtenir le jeton à partir du contrôle WebBrowser et l'analyser.

Ceci est similaire à lorsque vous souhaitez utiliser ACS dans une application Windows Phone. Je vous suggère de jeter un oeil à cet article de blog: Azure ACS on Windows Phone 7. Et voici l'exemple de code qui analyse le jeton après que l'utilisateur se connecte via le contrôle WebBrowser (sur WP7):

private void SignInWebBrowserControl_ScriptNotify(object sender, NotifyEventArgs e) 
{ 
    var acsResponse = ACSResponse.FromJSON(e.Value); 

    RequestSecurityTokenResponse rstr = null; 
    Exception exception = null; 
    try 
    { 
     string binaryToken = HttpUtility.HtmlDecode(acsResponse.securityToken); 
     string tokenText = RequestSecurityTokenResponseDeserializer.ProcessBinaryToken(binaryToken); 
     DateTime expiration = DateTime.Now + TimeSpan.FromSeconds(acsResponse.expires – acsResponse.created); 

     rstr = new RequestSecurityTokenResponse 
        { 
         Expiration = expiration, 
         TokenString = tokenText, 
         TokenType = acsResponse.tokenType 
        }; 
+0

Je souhaite marquer comme réponse. La méthode 'ValidateRequest' dans le gestionnaire d'événements' OnAuthenticateRequest' fonctionne correctement, mais la demande au gestionnaire d'authentification de 'Authenticate' avec le' ClaimsPrincipal' créé échoue. Le principal n'est pas l'authentification et tout le spectacle s'arrête là. Je suppose que c'est un problème de configuration, mais je suis incapable de déterminer la source de l'échec. –

+0

Okay. J'ai réussi à faire ça. Mon problème (et je ne le comprends pas vraiment) était que j'envoyais la requête web 'http: // localhost/contacts/Directory' comme dans l'exemple et que le call post d'authentification était en cours, une fois pour cette URL (qui a authentifié correctement et une fois pour 'http: // localhost/contacts/Directory /' qui n'a pas.J'ai ajouté une barre oblique à l'URL et le test fonctionne maintenant –

+0

Pour implémenter cela comme une application winforms, nous devons changer le HttpUtility (pour l'encodage d'URL), l'emplacement du stockage de jetons et l'utilisation de la propriété 'ObjectForScripting' du navigateur Web pour implémenter la notification. –

Questions connexes