QuickBooksに接続するためにASP.NETMVC4の組み込みOAuth機能を使用しようとしています。問題(つまり、課題)は、組み込みのテンプレート(facebook、googleなど)がすべて2本足の認証を提供することです。QuickBooksは3つを使用します。結果として、これは本当に私のお尻の泥穴を踏みつけています。
幸いなことに、QuickBooksはMVC3の例を提供しています。あなたはここでそれを見つけるかもしれません:
私に問題を引き起こしている最も関連性のあるコードはここにあります:
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時間以上投資したと思います。
ありがとう、ウィル