Yahoo OAuth2 get_token返回错误500(内部服务器错误)

时间:2019-09-20 14:26:14

标签: c# oauth-2.0 restsharp yahoo-api

我正在关注Yahoo的官方文档(https://developer.yahoo.com/oauth2/guide/openid_connect/getting_started.html)。用户使用Yahoo登录后,我可以成功获取授权码。我现在处于第3步,尝试用令牌交换授权码,但Yahoo不断返回http错误500。

要交换来自Yahoo的访问令牌的授权代码,我正在使用以下RestSharp语法:

var client = new RestClient(provider.TokenUrl);
RestRequest request = new RestRequest() { Method = Method.POST };

request.AddParameter("client_id", codeModel.clientId, ParameterType.GetOrPost);
request.AddParameter("client_secret", provider.Secret, ParameterType.GetOrPost);
request.AddParameter("code", codeModel.code, ParameterType.GetOrPost);
request.AddParameter("grant_type", "authorization_code", ParameterType.GetOrPost);
request.AddParameter("redirect_uri", codeModel.redirectUri, ParameterType.GetOrPost);
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");

var response = client.Execute<TokenResponseModel>(request);

responde.data返回以下内容: 内容:{“错误”:“ ACCESS_TOKEN_GENERATION_FAILED”,“错误说明”:“访问令牌生成失败”} StatusCode:InternalServerError

官方文档指出:“以下请求参数是通过请求正文中的HTTP POST传输的。但是,您也可以在HTTP标头中发送参数client_id和client_secret。”

我尝试了两种方法(clientid和secret作为正文的一部分以及作为基本授权标头),并且都返回相同的结果。

在将clientid和secret作为基本授权标头的一部分发送时,以上两个参数都将替换为以下内容:

client.Authenticator = new RestSharp.Authenticators.HttpBasicAuthenticator(codeModel.clientId, provider.Secret);

如前所述,Yahoo返回的唯一消息是“内部服务器错误”。

RestSharp语法是否有可能导致此问题的错误?任何其他想法将不胜感激。

不用说,请求的所有参数都包含它们所需的数据。

谢谢

2 个答案:

答案 0 :(得分:2)

在YDN上创建应用程序配置文件时,必须确保至少选择一个API权限。例如,尝试“个人资料(社交目录)为公开”。

如果您的应用程序没有API权限,那么令牌生成将按照您描述的方式失败。

如果您已经创建了没有权限的应用程序,则必须将其删除并重新创建。

答案 1 :(得分:0)

对于它的价值,我使用Java得到相同的响应。 https://openidconnect.net处也有openid-connect“游乐场”,其作用相同。它工作大约两年前。从那以后,我大约每六个月尝试一次失败。