Yahoo OAuth2 get_token return 错误 500(内部服务器错误)
Yahoo OAuth2 get_token return error 500 (internal server error)
我正在关注 Yahoo 官方文档 (https://developer.yahoo.com/oauth2/guide/openid_connect/getting_started.html)。用户登录雅虎后,我可以成功获得授权码。我现在在第 3 步,试图用授权码交换令牌,但 Yahoo 保持 returning 一个 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 return 如下:
内容:{"error":"ACCESS_TOKEN_GENERATION_FAILED","error_description":"Access token generation failed"}
状态代码:InternalServerError
官方文档指出:"The request parameters below are transmitted using HTTP POST in the request body. You can, however, also send the parameters client_id and client_secret in the HTTP Headers instead"。
我已经尝试了两种方法(clientid 和 secret 作为 body 的一部分和作为基本授权 Header)并且两者都 return 相同的结果。
当发送 clientid 和密码作为基本授权的一部分时 header,上面的两个参数都被以下替换:
client.Authenticator = new RestSharp.Authenticators.HttpBasicAuthenticator(codeModel.clientId, provider.Secret);
如前所述,雅虎 return 编辑的唯一消息是 "internal server error"。
RestSharp 语法是否有问题导致了这种情况?任何其他想法将不胜感激。
不用说了,请求的所有参数都包含了自己需要的数据
谢谢
当您在 YDN 创建申请资料时,您必须确保 select 至少获得一项 API 许可。例如尝试 "Profiles (Social Directory) Read Public".
如果您的应用程序没有 API 权限,那么令牌生成将按照您描述的方式失败。
如果您已经创建了一个没有权限的应用程序,那么您必须将其删除并重新创建。
我正在关注 Yahoo 官方文档 (https://developer.yahoo.com/oauth2/guide/openid_connect/getting_started.html)。用户登录雅虎后,我可以成功获得授权码。我现在在第 3 步,试图用授权码交换令牌,但 Yahoo 保持 returning 一个 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 return 如下: 内容:{"error":"ACCESS_TOKEN_GENERATION_FAILED","error_description":"Access token generation failed"} 状态代码:InternalServerError
官方文档指出:"The request parameters below are transmitted using HTTP POST in the request body. You can, however, also send the parameters client_id and client_secret in the HTTP Headers instead"。
我已经尝试了两种方法(clientid 和 secret 作为 body 的一部分和作为基本授权 Header)并且两者都 return 相同的结果。
当发送 clientid 和密码作为基本授权的一部分时 header,上面的两个参数都被以下替换:
client.Authenticator = new RestSharp.Authenticators.HttpBasicAuthenticator(codeModel.clientId, provider.Secret);
如前所述,雅虎 return 编辑的唯一消息是 "internal server error"。
RestSharp 语法是否有问题导致了这种情况?任何其他想法将不胜感激。
不用说了,请求的所有参数都包含了自己需要的数据
谢谢
当您在 YDN 创建申请资料时,您必须确保 select 至少获得一项 API 许可。例如尝试 "Profiles (Social Directory) Read Public".
如果您的应用程序没有 API 权限,那么令牌生成将按照您描述的方式失败。
如果您已经创建了一个没有权限的应用程序,那么您必须将其删除并重新创建。