在尝试进行身份验证时获取Instagram错误

时间:2016-10-19 14:05:38

标签: c# uwp instagram instagram-api instasharp

在通用Windows应用程序(UWP)中,我试图将用户登录到他/她的Instagram帐户,但没有运气。用户输入凭据并按下登录按钮后,我不断收到以下错误:

enter image description here

以下是使用的代码:

var scopes = new List<OAuth.Scope>();
scopes.Add(InstaSharp.OAuth.Scope.Basic);

var link = InstaSharp.OAuth
                .AuthLink
                (
                    _config.OAuthUri + "authorize",
                    _config.ClientId,
                    _config.RedirectUri,
                    scopes,
                    InstaSharp.OAuth.ResponseType.Token
                );

var webAuthResult = await WebAuthenticationBroker
                                .AuthenticateAsync
                                (
                                    WebAuthenticationOptions.None,
                                    new Uri(link)
                                );

switch (webAuthResult.ResponseStatus)
{
    case WebAuthenticationStatus.Success:
        return true;

    case WebAuthenticationStatus.UserCancel:
        return false;

    case WebAuthenticationStatus.ErrorHttp:
        return false;

    default:
        return false;
}

我做错了吗?

更新1:

以下是一个UWP快速示例,演示了该问题:

UWP SAMPLE

更新2:

我发现导致“无法连接到服务”错误的问题。以下是导致问题的代码:

        _config = new InstagramConfig(clientIdTextBox.Text,
                                clientSecretTextBox.Text,
                                WebAuthenticationBroker.GetCurrentApplicationCallbackUri().ToString(),
                                WebAuthenticationBroker.GetCurrentApplicationCallbackUri().ToString());

我的第三个参数Redirect Url不是网址,而是应用程序链接。如果我要将其更改为像www.instagram.com这样的简单Url,那么它可以工作,但浏览器在该重定向网址上保持打开状态。

如何使用重定向网址将浏览器重定向回我的UWP应用

3 个答案:

答案 0 :(得分:2)

我发现了我的问题!

最后,我的重定向网址未将完全与我在Instragram开发者帐户中提供的网址相匹配,这导致了问题。

UPDATE:

虽然我解决了我的问题,而且我正确地收到了访问代码,但是Instragram似乎存在更大的问题,因为我总是收到400 Bad Request。从我在其他开发人员在线看到的情况来看,这是一个非常常见的问题。我在沙箱环境中,我想知道这与它有什么关系。

答案 1 :(得分:0)

您正在使用的链接变量的最终字符串是什么。它应该像下面的URL

https://instagram.com/oauth/authorize/?client_id= {your_client_id}&安培; REDIRECT_URI = {your_redirect_url}&安培; RESPONSE_TYPE =代码

如果您的重定向网址中包含参数值,则必须在Instagram应用和您从代码发送的重定向网址中添加另一个= true。

然后,您必须在收到Instagram网站针对上述电话的回复后,继续执行oauth流程的第2步。

答案 2 :(得分:0)

您似乎正在开发WPF Windows应用程序。在这种情况下,我建议您创建一个Web服务或WCF服务,并放置调用instagram API的逻辑,并从Web服务中的instagram API接收访问令牌,并在服务器中托管服务。然后,您可以将Instagram应用程序中的服务Web地址作为有效的URl。如果您有服务器IP,那么它没问题。如果您在本地IIS中托管,请尝试将本地主机隧道连接到Internet。

我没有WPF Windows应用程序的代码。下面是我用于Instagram OAuth2的c#WEB API的代码。您可以将此翻译成您的案例。

方法1: - Oauth的第一步

private void MakeRequestForToken()
{
    string instagramIntialRedirectUrl = "https://instagram.com/oauth/authorize/?client_id={yourclientid}&redirect_uri={Should  be a valid URL that can be accessed by instagram}&response_type=code"
    Response.Redirect(instagramUrl);
}

方法2: - Oauth的第二步(重定向URL应该以这样一种方式给出,即从instagram指向重定向URL的响应达到此方法)

private void HandleAuthorizeTokenResponse()
{
    var request = (HttpWebRequest)WebRequest.Create("https://api.instagram.com/oauth/access_token");
    var postData = "client_id=" + AppKey + "&client_secret=" + AppSecret + "&grant_type=authorization_code&code=" + Code + "&redirect_uri=" + RedirectUrl;
    var data = Encoding.ASCII.GetBytes(postData);
    request.Method = "POST";
    request.ContentType = "application/json; charset=utf-8";
    request.ContentLength = data.Length;
    using (var stream = request.GetRequestStream())
    {
        stream.Write(data, 0, data.Length);
    }
    var response = (HttpWebResponse)request.GetResponse();
    var reader = new StreamReader(response.GetResponseStream());
    string objText = reader.ReadToEnd();
}

希望这有帮助!