尝试验证时 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 快速示例:
更新 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 错误请求。从我在网上看到的其他开发人员的情况来看,这是一个非常普遍的问题。我在沙盒环境中,我想知道这是否与它有关。
在通用 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 快速示例:
更新 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 错误请求。从我在网上看到的其他开发人员的情况来看,这是一个非常普遍的问题。我在沙盒环境中,我想知道这是否与它有关。