7 votes

Implémentation d'oauth dans SugarCRM à l'aide de .NET

J'ai une application web développée en .net framework. J'essaie d'implémenter Oauth dans sugarCRM afin de l'intégrer à mes applications.

Le mécanisme Oauth donné par sugarCRM utilise PHP. Cliquez ici ... alors que mon application est conçue en ASP.

J'essaie de trouver une solution (comme convertir le code php en asp ou mettre en œuvre le même mécanisme dans mon application) mais je n'ai pas trouvé de solution.

7voto

Tim Bailey Points 362

Après bien des efforts, j'ai réussi à faire fonctionner mon code .Net sur SugarCRM......

C'est ce que j'ai fait....all dans une application Console pour moi. C'est une preuve de concept et donc tout est codé en dur pour le moment !

Utiliser Nuget pour installer OAuth par Daniel Crenna

Étape 1 : Établir la clé du consommateur

Allez dans Admin -> section OAuth Keys sur SugarCRM et créez un nouvel enregistrement, j'ai utilisé Key & Secret.

Étape 2 : Création d'un jeton de demande

private static void CreateRequestToken()
{
    // Creating a new instance directly
    OAuthRequest client = new OAuthRequest
    {
        Method = "GET",
        Type = OAuthRequestType.RequestToken,
        SignatureMethod = OAuthSignatureMethod.HmacSha1,
        ConsumerKey = "Key",
        ConsumerSecret = "Secret",
        RequestUrl = "http://localhost/service/v4/rest.php",
        Version = "1.0",
        SignatureTreatment = OAuthSignatureTreatment.Escaped
    };

    // Using URL query authorization
    string auth = client.GetAuthorizationQuery(new Dictionary<string, string>() { { "method", "oauth_request_token" } });

    var request = (HttpWebRequest)WebRequest.Create("http://localhost/service/v4/rest.php?method=oauth_request_token&" + auth);
    var response = (HttpWebResponse)request.GetResponse();

    NameValueCollection query;
    using (StreamReader sr = new StreamReader(response.GetResponseStream()))
    {
        string result = sr.ReadToEnd();

        query = HttpUtility.ParseQueryString(result);
    }

    Console.WriteLine(query["authorize_url"]);
    Console.WriteLine(query["oauth_token"]);
    Console.WriteLine(query["oauth_token_secret"]);
}

C'est la partie délicate qui m'a pris des heures à comprendre, remarquez que le requesturl est sans la partie query dans le client, et vous devez l'ajouter à l'appel GetAuthorizationQuery ET à l'url WebRequest réelle.

Notez les 3 éléments prêts pour l'étape 4.

Étape 3 Approuver le jeton de demande

Visitez l'url "authorize_url" ci-dessus et ajoutez également &token= "oauth_token". Pour cela, c'était :

http://localhost/index.php?module=OAuthTokens&action=authorize&token=adae15a306b5

Autorisez le jeton et enregistrez le code d'autorisation du jeton.

Étape 4 Demande de jeton d'accès

private static void RequestAccessToken()
{
    OAuthRequest client = new OAuthRequest
    {
        Method = "GET",
        Type = OAuthRequestType.AccessToken,
        SignatureMethod = OAuthSignatureMethod.HmacSha1,
        ConsumerKey = "Key",
        ConsumerSecret = "Secret",
        RequestUrl = "http://localhost/service/v4/rest.php",
        Version = "1.0",
        SignatureTreatment = OAuthSignatureTreatment.Escaped,
        Token = "adae15a306b5",
        TokenSecret = "e1f47d2a9e72",
        Verifier = "33e2e437b2b3"
    };

    // Using URL query authorization
   string auth = client.GetAuthorizationQuery(new Dictionary<string, string>() { { "method", "oauth_access_token" } });

   var request = (HttpWebRequest)WebRequest.Create("http://localhost/service/v4/rest.php?method=oauth_access_token&" + auth);
   var response = (HttpWebResponse)request.GetResponse();

   NameValueCollection query;
   using (StreamReader sr = new StreamReader(response.GetResponseStream()))
   {
       string result = sr.ReadToEnd();
       query = HttpUtility.ParseQueryString(result);
   }

   Console.WriteLine(query["oauth_token"]);
   Console.WriteLine(query["oauth_token_secret"]);
}

Token et TokenSecret sont de l'étape 2, Verifier est le Code d'Authentification de l'étape 3.

Étape 5 Utiliser le jeton d'accès

J'utilise simplement l'identifiant de session tel que recommandé par la documentation, donc pour obtenir l'identifiant de session

private static void GetSessionId()
{
    OAuthRequest client = new OAuthRequest
    {
        Method = "GET",
        Type = OAuthRequestType.ProtectedResource,
        SignatureMethod = OAuthSignatureMethod.HmacSha1,
        ConsumerKey = "Key",
        ConsumerSecret = "Secret",
        RequestUrl = "http://localhost/service/v4/rest.php",
        Version = "1.0",
        SignatureTreatment = OAuthSignatureTreatment.Escaped,
        Token = "adae15a306b5",
        TokenSecret = "2d68ecf5152f"
     };

     string auth = client.GetAuthorizationQuery(new Dictionary<string, string>() 
     { 
        { "method", "oauth_access" }, 
        { "input_type", "JSON" },
        { "request_type", "JSON" },
        { "response_type", "JSON" } 
     });

     var request = (HttpWebRequest)WebRequest.Create("http://localhost/service/v4/rest.php?method=oauth_access&input_type=JSON&request_type=JSON&response_type=JSON&" + auth);
     var response = (HttpWebResponse)request.GetResponse();

     dynamic o;
     using (StreamReader sr = new StreamReader(response.GetResponseStream()))
     {
         string result = sr.ReadToEnd();
         o = Newtonsoft.Json.JsonConvert.DeserializeObject(result);
     }

     Console.WriteLine("SessionId: {0}", o.id);
}

Ici, j'utilise JSON.Net pour analyser le Json dans un objet dynamique pour un accès facile à l'id.

Étape 6 Faites-lui faire quelque chose....

À vous de jouer !

Expérience plutôt douloureuse, mais au moins ça marche pour moi.....

Tim

2voto

gaurav Points 511

Je n'ai pas compris ce que vous vouliez dire par mettre en œuvre à la manière de SugarCRM. Mais si vous ne pouvez pas utiliser dotnetopenauth vous pouvez créer votre propre OAuth en utilisant RestSharp o Hamac

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X