3

QuickBooksに接続するためにASP.NETMVC4の組み込みOAuth機能を使用しようとしています。問題(つまり、課題)は、組み込みのテンプレート(facebook、googleなど)がすべて2本足の認証を提供することです。QuickBooksは3つを使用します。結果として、これは本当に私のお尻の泥穴を踏みつけています。

幸いなことに、QuickBooksはMVC3の例を提供しています。あなたはここでそれを見つけるかもしれません:

https://ipp.developer.intuit.com/0010_Intuit_Partner_Platform/0025_Intuit_Anywhere/0020_Connect/0010_From_Within_Your_App/Implement_OAuth_in_Your_App

私に問題を引き起こしている最も関連性のあるコードはここにあります:

    private String consumerSecret, consumerKey, oauthLink, RequestToken, TokenSecret, oauth_callback_url;

    /// <summary>
    /// Action Result for Index, This flow will create OAuthConsumer Context using Consumer key and Consuler Secret key
    /// obtained when Application is added at intuit workspace. It creates OAuth Session out of OAuthConsumer and Calls 
    /// Intuit Workpsace endpoint for OAuth.
    /// </summary>
    /// <returns>Redirect Result.</returns>
    public RedirectResult Index()
    {
        oauth_callback_url = Request.Url.GetLeftPart(UriPartial.Authority) + ConfigurationManager.AppSettings["oauth_callback_url"];
        consumerKey = ConfigurationManager.AppSettings["consumerKey"];
        consumerSecret = ConfigurationManager.AppSettings["consumerSecret"];
        oauthLink = Constants.OauthEndPoints.IdFedOAuthBaseUrl;
        IToken token = (IToken)Session["requestToken"];
        IOAuthSession session = CreateSession();
        IToken requestToken = session.GetRequestToken();
        Session["requestToken"] = requestToken;
        RequestToken = requestToken.Token;
        TokenSecret = requestToken.TokenSecret;

        oauthLink = Constants.OauthEndPoints.AuthorizeUrl + "?oauth_token=" + RequestToken + "&oauth_callback=" + UriUtility.UrlEncode(oauth_callback_url);
        return Redirect(oauthLink);
    }

    /// <summary>
    /// Gets the Access Token
    /// </summary>
    /// <returns>Returns OAuth Session</returns>
    protected IOAuthSession CreateSession()
    {
        OAuthConsumerContext consumerContext = new OAuthConsumerContext
        {
            ConsumerKey = consumerKey,
            ConsumerSecret = consumerSecret,
            SignatureMethod = SignatureMethod.HmacSha1
        };

        OAuthSession s = new OAuthSession(consumerContext,
                                        Constants.OauthEndPoints.IdFedOAuthBaseUrl + Constants.OauthEndPoints.UrlRequestToken,
                                        oauthLink,
                                        Constants.OauthEndPoints.IdFedOAuthBaseUrl + Constants.OauthEndPoints.UrlAccessToken);

        return s;
    }

このことから、MVC 3の例でセッションが作成され、リクエストトークンが取得されていることがわかります。私の当面の問題は、このリクエストトークンを取得できるMVC4のコードを見つけることです。私はそれが私のAccountControllerにあると思います

    //
    // POST: /Account/ExternalLogin
    //
    // Go to me first!!!

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult ExternalLogin(string provider, string returnUrl)
    {
        return new ExternalLoginResult(provider, Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));
    }


    //
    // Go to me second!!!

    internal class ExternalLoginResult : ActionResult
    {
        public ExternalLoginResult(string provider, string returnUrl)
        {
            Provider = provider;
            ReturnUrl = returnUrl;
        }

        public string Provider { get; private set; }
        public string ReturnUrl { get; private set; }

        public override void ExecuteResult(ControllerContext context)
        {
            if(Provider.Equals("Quickbooks Online")){
                // oauthLink = Constants.OauthEndPoints.AuthorizeUrl + "?oauth_token=" + RequestToken + "&oauth_callback=" + UriUtility.UrlEncode(oauth_callback_url);
                // oauthLink    "https://workplace.intuit.com/Connect/Begin?oauth_token=qyprdvh1kZ3dpyobhKfJ54C10xPJPDy0vtwdNCeZmUmbLJdr&oauth_callback=http%3A%2F%2Flocalhost%3A50671%2FOauthResponse" string
                string requestToken = "";  // How do I get this?
                string oauthCallback = context.HttpContext.Request.Url.Scheme + "/OauthResponse";

    //
    // Now do I get a request token?  How?

                string returnUrl = "https://workplace.intuit.com/Connect/Begin" + "?oauth_token=" + requestToken + "&oauth_callback=" + HttpUtility.UrlEncode(oauthCallback);
                OAuthWebSecurity.RequestAuthentication(Provider, returnUrl);
            }
            else{
                OAuthWebSecurity.RequestAuthentication(Provider, ReturnUrl);
            }
        }
    }

しかし、ここから私は道に迷います。どんな助けでもいただければ幸いです。私はたくさんグーグルで検索しましたが、これを機能させるためにこれまでに40時間以上投資したと思います。

ありがとう、ウィル

4

1 に答える 1

2

Intuit パートナー プラットフォームは現在、OAuth1.0a をサポートしています。3 レグ OAuth の最初のレグは、OAuth リクエスト トークンの調達です。

私は MVC4 の OAuthWebSecurity を使用していません。しかし、ドキュメント/ソースコードからすぐに収集したものに基づいて、別個の「QuickBooksClient」を作成する必要があるようです(そして、それをオープンソースにしますか?)。レシピとしてLinkedInClient クラスに従います。IPP docsから、OAuth エンドポイントは次のとおりです。

リクエストトークンを取得: https://oauth.intuit.com/oauth/v1/get_request_token
ログインページ: https://appcenter.intuit.com/Connect/Begin
アクセストークンを取得: https://oauth.intuit.com/oauth /v1/get_access_token

于 2013-02-22T01:59:57.863 に答える