3

在通用 Windows 应用程序 (UWP) 中,我试图将用户登录到他/她的 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 样本


更新 2:


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

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

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

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

4

3 回答 3

2

我发现了我的问题!

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

更新:

虽然我解决了我的问题,并且我正确收到了我的访问代码,但似乎 Instragram 存在更大的问题,因为我总是收到 400 Bad Request。根据我从其他开发人员那里看到的在线情况,这是一个非常普遍的问题。我在沙盒环境中,我想知道这是否与它有关。

于 2016-10-27T18:54:05.753 回答
0

您似乎正在开发 WPF Windows 应用程序。在这种情况下,我建议您创建一个 Web 服务或 WCF 服务,并将调用 instagram API 和从 instagram API 接收访问令牌的逻辑放在 Web 服务中,并将服务托管在服务器中。然后您可以在 instagram App 中提供服务网址作为有效的 URl。如果你有服务器IP,那就没问题了。如果您在本地 IIS 中托管,请尝试将您的 localhost 隧道连接到 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();
}

希望这可以帮助!

于 2016-10-24T15:04:12.333 回答
0

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

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

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

然后,在收到来自 instagram 网站对上述调用的响应后,您必须继续执行 oauth 流程的第 2 步。

于 2016-10-19T21:21:48.273 回答