gpt4 book ai didi

asp.net - ASP.NET 中的 MailChimp oauth2 不断返回 invalid_grant

转载 作者:行者123 更新时间:2023-12-04 02:15:15 24 4
gpt4 key购买 nike

我正在开发一个提供与 MailChimp 集成的新应用程序。基本上,它使用户能够轻松地将他们的客户联系信息直接导出到 MailChimp 帐户(即,导出到 MailChimp 内的特定邮件列表)。所有这些都有效,但与我的问题有些无关。

为了不要求用户每次都输入 MailChimp-credentials,我将按照此处所述实现 oauth2 授权工作流程:http://apidocs.mailchimp.com/oauth2/

它在第 1-3 步中工作得很好,但第 4 步让我很痛苦。这是我第一次使用 oauth,但我似乎了解基础知识。

这是我的问题:

当我对 https://login.mailchimp.com/oauth2/token 进行 POST 调用时-URI,为了获得最终的访问 token ,我不断收到 JSON 结果中的错误:"invalid_grant"

我已经检查了请求和响应流,我的 url 编译正确。

这是我在 Controller 中的代码:

(GrantEcoAccess 只是授予对另一个应用程序的访问权限 - 其余的应该不言自明)

public class HomeController : ApplicationController
{

private readonly string authorize_uri = "https://login.mailchimp.com/oauth2/authorize";
private readonly string access_token_uri = "https://login.mailchimp.com/oauth2/token";
private readonly string mailchimp_clientid2 = "xxx";
private readonly string mailchimp_secret2 = "yyy";

...

public ActionResult GrantEcoAccess()
{

//if exist: use saved token
var user = (Mailchimp_users)Session["user"];
if (!string.IsNullOrWhiteSpace(user.EcoToken))
return RedirectToAction("GrantMailChimpAccess");

// if !
var url = "https://secure.e-conomic.com/secure/api1/requestaccess.aspx?role=superuser&appId=MailChimp&redirectUrl=http://localhost:18017/Home/IncomingToken";
Redirect(url).ExecuteResult(ControllerContext);
return null;
}


public ActionResult IncomingToken(string token)
{
var user = (Mailchimp_users)Session["user"];
user.EcoToken = token;
EcoSession.DataSession.Refresh(System.Data.Objects.RefreshMode.ClientWins, user);
EcoSession.DataSession.SaveChanges();

return RedirectToAction("GrantMailChimpAccess");
}

public ActionResult GrantMailChimpAccess()
{

//if exist: use saved token
var user = (Mailchimp_users)Session["user"];
if (!string.IsNullOrWhiteSpace(user.MailChimpToken))
return RedirectToAction("Index", "Subscribe");



//if !
var url = string.Format("{0}?response_type=code&client_id={1}&redirect_uri=", authorize_uri, mailchimp_clientid2, "http://127.0.0.1:18017/Home/IncomingMailChimpToken");
Redirect(url).ExecuteResult(ControllerContext);
return null;
}

public ActionResult IncomingMailChimpToken(string code)
{


var url = "https://login.mailchimp.com/oauth2/token?grant_type=authorization_code&client_id=XX&client_secret=XX&code=" + code + "&redirect_uri=http://127.0.0.1:18017/Home/AuthComplete";
//var url = string.Format("?grant_type=authorization_code&client_id={0}&client_secret={1}&code={2}&redirect_uri={3}", mailchimp_clientid, mailchimp_secret, code, Url.Action("AuthComplete"));


Response.Clear();

StringBuilder sb = new StringBuilder();
sb.Append("<html>");
sb.AppendFormat(@"<body onload='document.forms[""form""].submit()'>");
sb.AppendFormat("<form name='form' action='{0}' method='post'>", access_token_uri);

sb.Append("<input type='hidden' name='grant_type' value='authorization_code'>");
sb.AppendFormat("<input type='hidden' name='client_id' value='{0}'>", mailchimp_clientid2);
sb.AppendFormat("<input type='hidden' name='client_secret' value='{0}'>", mailchimp_secret2);
sb.AppendFormat("<input type='hidden' name='code' value='{0}'>", code);
sb.AppendFormat("<input type='hidden' name='redirect_uri' value='{0}'>", "http://127.0.0.1:18017/Home/AuthComplete");
// Other params go here

sb.Append("</form>");
sb.Append("</body>");
sb.Append("</html>");

Response.Write(sb.ToString());
Response.End();

return null;

}

public ActionResult AuthComplete(string access_token, string expires_in, string scope)
{
if (string.IsNullOrWhiteSpace(access_token))
throw new Exception("Could not authorize user with MailChimp");

var user = (Mailchimp_users)Session["user"];
user.MailChimpToken = access_token;
EcoSession.DataSession.Refresh(System.Data.Objects.RefreshMode.ClientWins, user);
EcoSession.DataSession.SaveChanges();


return RedirectToAction("Index", "Subscribe");
}

}

让我崩溃的是第 4 步,而不是第 5 步。

最佳答案

您应该使用 post 在正文中发送您的请求参数,如果您使用的是 curl php,您可以这样做:

$value = http_build_query($params); //params is an array
curl_setopt($ch, CURLOPT_POSTFIELDS, $value);

值应该是这样的:

grant_type=authorization_code&client_id=635959587059&client_secret=0da3e7744949e1406b7b250051ee1a95&code=1edf2589e664fd317f6a7ff5f97b42f7&redirect_uri=http%3A%2F%2F192.168.1.8%2Foauth%2Fcomplete.php

请注意,您应该以查询字符串的形式创建正文请求,不要发送 json,它们不会找到您的参数。如果您在执行此操作后收到无效的授权响应或其他内容,请检查您用于获取第一个代码的重定向 uri 是否与您发送以获取 token 的重定向 uri 完全相同。

此外,对于使用 PHP 的用户,要匹配 mailchimp documentation 的内容州使用这个:

curl_setopt($ch, CURLOPT_USERAGENT, 'oauth2-draft-v10');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));

关于asp.net - ASP.NET 中的 MailChimp oauth2 不断返回 invalid_grant,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12724581/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com