7

.net フレームワークで開発された Web アプリケーションがあります。アプリケーションと統合するために、sugarCRM に Oauth を実装しようとしています。

sugarCRM によって提供される Oauth メカニズムは、PHP を使用して います。ここをクリック... ここで、私のアプリケーションは ASP で設計されています。

私は解決策(phpコードをaspに変換する、アプリケーションに同じメカニズムを実装するなど)を見つけようとしていますが、解決策はありません。助けていただければ幸いです。

4

2 に答える 2

7

苦労した後、.NetコードがSugarCRMで動作するようになりました。

これは私がしたことです....すべて私のためのコンソールアプリで。これは概念実証であるため、今のところすべてがハードコーディングされています。

Nugetを使用してDanielCrennaによるOAuthをインストールする

ステップ1:コンシューマーキーを確立する

SugarCRMの[管理]->[OAuthキー]セクションに移動し、新しいレコードを作成します。キーとシークレットを使用しました。

ステップ2:リクエストトークンを作成する

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

これは、私が理解するのに何年もかかったトリッキーな部分です。requesturlにはクライアントにクエリ部分がなく、GetAuthorizationQuery呼び出しと実際のWebRequestURLに追加していることに注意してください。

手順4の準備ができている3つの項目を書き留めます。

ステップ3リクエストトークンを承認する

上記のURL「authorize_url」にアクセスし、&token="oauth_token"も追加します。これは:

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

トークンを認証し、トークン認証コードを記録します。

ステップ4アクセストークンを要求する

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とTokenSecretはステップ2からのものであり、Verifierはステップ3からの認証コードです。

ステップ5アクセストークンを使用する

ドキュメントで推奨されているようにセッションIDを使用しているので、sessionIdを取得します

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

ここでは、JSON.Netを使用してJsonを動的オブジェクトに解析し、IDに簡単にアクセスできるようにしています。

ステップ6何かをさせる...

あなたに!

かなり辛い経験ですが、少なくとも私にとってはうまくいきました.....

ティム

于 2012-12-06T16:06:15.307 に答える
2

SugarCRM の方法で実装するという意味がわかりませんでした。ただし、 dotnetopenauthを使用できない場合は、 RestSharpまたはHammockを使用して独自の OAuth をスピンできます。

于 2012-12-06T11:36:01.797 に答える