.NET 中的 OAuth 2.0 与 Instagram API

Posted

技术标签:

【中文标题】.NET 中的 OAuth 2.0 与 Instagram API【英文标题】:OAuth 2.0 In .NET With Instagram API 【发布时间】:2011-11-01 13:58:07 【问题描述】:

我正在使用 Instagram API,但我被困在他们的 OAuth 的第 2 步。我有一个从他们重定向回给我的代码,但是他们希望我用下面的参数做一个帖子......

curl \
    -F 'client_id=CLIENT-ID' \
    -F 'client_secret=CLIENT-SECRET' \
    -F 'grant_type=authorization_code' \
    -F 'redirect_uri=YOUR-REDIRECT-URI' \
    -F 'code=CODE' \
    https://api.instagram.com/oauth/access_token

我将其作为 ASP.NET MVC 3 解决方案来实现。我试图像这样实现这篇文章......


    WebRequest request = HttpWebRequest.Create("https://api.instagram.com/oauth/access_token");
    request.Method = "POST";
    request.Headers.Add("client_id", "sdlf0982jiejfopijfp92jjiwoijf90");
    request.Headers.Add("client_secret", "39993939393939393939393939393");
    request.Headers.Add("grant_type", "authorization_code");
    request.Headers.Add("redirect_uri", "http://localhost:34962/Home/Auth");
    request.Headers.Add("code", 111111);
    var response = request.GetResponse();
    return View();

这给了我一个 400 错误,说“需要 client_id”。我已经包含了 client_id,但我显然没有正确实现。

执行第二阶段 OAuth 的“最佳实践”方式是什么?

【问题讨论】:

我发现了这个相关的 SO 问题,我认为这是我正在寻找的。 ***.com/questions/3279888/… 如果你更喜欢HttpWebRequest而不是WebClient,请看答案here 【参考方案1】:

我从above mentioned SO post 得到了关于将 POST 参数添加到 HttpWebRequest 的答案。以下是我的实现细节。

NameValueCollection parameters = new NameValueCollection();
parameters.Add("client_id", "3498wjfoi2892jf0j2ij02fjakjf2");
parameters.Add("client_secret", "392621gfdlfj2k2hf7g2lfhj2g");
parameters.Add("grant_type", "authorization_code");
parameters.Add("redirect_uri", "http://localhost:34962/Home/Auth");
parameters.Add("code", code);

WebClient client = new WebClient();
var result = client.UploadValues("https://api.instagram.com/oauth/access_token", parameters);

var response = System.Text.Encoding.Default.GetString(result);

return View("Index", (object)response);

【讨论】:

我想使用WebClient UploadData()方法上传二进制数据。我的单页应用程序已经有了访问令牌;你能告诉我如何在UploadData() 方法中使用令牌,因为它不接受NameValueCollection 作为参数。【参考方案2】:

我花了很多时间在我的任务上,因为我没有看到响应错误。

        try
    
        NameValueCollection parameters = new NameValueCollection();
        parameters.Add("client_id", "638ed32066b04801bd40aa05c1542915");
        parameters.Add("client_secret", "fc67cf3645a648ce82106298010acd65");
        parameters.Add("grant_type", "authorization_code");
        parameters.Add("redirect_uri", "http://localhost:34962/Test/InstagramCallback");
        parameters.Add("code", code);

        WebClient client = new WebClient();
        var result = client.UploadValues("https://api.instagram.com/oauth/access_token", "POST", parameters);

        return Encoding.Default.GetString(result);
    
    catch (WebException ex)
    
        StreamReader reader = new StreamReader(ex.Response.GetResponseStream());
        string line;
        StringBuilder result = new StringBuilder();
        while ((line = reader.ReadLine()) != null)
        
            result.Append(line);
        
        return result.ToString();
    

【讨论】:

我可以在我的 Windows 窗体应用程序 中使用它吗? redirect_uri 可能有问题? Cliend_idClient_secret 我可以进入 api.instagram 页面。

以上是关于.NET 中的 OAuth 2.0 与 Instagram API的主要内容,如果未能解决你的问题,请参考以下文章

Oauth 2.0 与 Auth0 与 WSO2

ASP.NET Web APP 和 Web API 无限重定向循环中的 Azure AD Open ID Connect OAuth 2.0

text .net核心调用api(使用oauth 2.0)

带有 Yahoo Asp.net 核心 2.0 的 OAuth

OAuth 2.0 范围参数与 OAuth 2.0 JWT access_token 范围声明

处理 OAuth 2.0 身份验证 - 在 ASP.NET MVC 应用程序中获取令牌重定向令牌响应