尝试验证时 Instagram 出错

Getting an error with Instagram when trying to authenticate

在通用 Windows 应用程序 (UWP) 中,我试图让用户登录 his/her Instagram 帐户,但没有成功。用户输入凭据并按下登录按钮后,我不断收到以下错误:

这是正在使用的代码:

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:


我找到了导致 "cannot connect to service" 错误的问题。这是导致问题的代码:

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

我的第三个参数,重定向 Url,不是网址,而是应用程序 link。如果我将其更改为简单的 Url,如 www.instagram.com,那么它可以工作,但是浏览器在该重定向 url.

上保持打开状态

如何使用重定向 Url 使浏览器 重定向回我的 UWP 应用程序 ???

您正在使用的 link 变量的最终字符串是什么。应该像下面这样URL

https://instagram.com/oauth/authorize/?client_id={your_client_id}&redirect_uri={your_redirect_url}&response_type=代码

如果您将参数值作为重定向 URL 的一部分,则必须在 Instagram 应用程序和从代码发送的重定向 URL 中添加 another=true .

收到instagram网站对上述调用的响应后,您必须继续进行oauth过程的第2步。

看来您正在开发 WPF windows 应用程序。在这种情况下,我建议您创建一个 Web 服务或 WCF 服务,并将调用 instagram API 和从 instagram API 接收访问令牌的逻辑放在 Web 服务中,并将该服务托管在服务器。然后你可以在 instagram 应用程序中提供服务网址作为有效 URl。如果你有一个服务器 IP 那么它很好。如果您在本地 IIS 中托管,请尝试将您的本地主机通过隧道连接到互联网。

我没有 WPF windows 应用程序的代码。下面是我用于执行 Instagram OAuth2 的 c# WEB API 的代码。您可以将其翻译成您的情况。

方法一:- 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();
}

希望对您有所帮助!

我发现了我的问题!

最后,我的重定向 Url 与我在 Instragram 开发者帐户中提供的 Url 完全 不匹配,这是导致问题的原因.

更新:

虽然我解决了我的问题,并且我正确地收到了我的访问代码,但 Instragram 似乎有一个更大的问题,因为我总是收到 400 错误请求。从我在网上看到的其他开发人员的情况来看,这是一个非常普遍的问题。我在沙盒环境中,我想知道这是否与它有关。