在通用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;
}
我做错了吗?
以下是一个UWP快速示例,演示了该问题:
我发现导致“无法连接到服务”错误的问题。以下是导致问题的代码:
_config = new InstagramConfig(clientIdTextBox.Text,
clientSecretTextBox.Text,
WebAuthenticationBroker.GetCurrentApplicationCallbackUri().ToString(),
WebAuthenticationBroker.GetCurrentApplicationCallbackUri().ToString());
我的第三个参数Redirect Url不是网址,而是应用程序链接。如果我要将其更改为像www.instagram.com这样的简单Url,那么它可以工作,但浏览器在该重定向网址上保持打开状态。
如何使用重定向网址将浏览器重定向回我的UWP应用
答案 0 :(得分:2)
我发现了我的问题!
最后,我的重定向网址未将完全与我在Instragram开发者帐户中提供的网址相匹配,这导致了问题。
虽然我解决了我的问题,而且我正确地收到了访问代码,但是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();
}
希望这有帮助!