我试图从我的UWP应用程序使用雅虎登录。
EndUri是http://localhost:8080/
WebAuthenticationResult WebAuthenticationResult = await WebAuthenticationBroker.AuthenticateAsync(
WebAuthenticationOptions.None,
StartUri,
EndUri);
如果我们按下它会将我引导到雅虎主页,而不是要求用户同意。有谁知道为什么会这样?
答案 0 :(得分:1)
您的授权网址存在两个问题。
首先,您网址中的 client_id 不正确。通常情况下,使用Authorization Code Flow for Server-side App中的client_id
,client_id
最终会使用 - ,它是
dj0yJmk9ak5IZ2x5WmNsaHp6JmQ9WVdrOVNqQkJUMnRYTjJrbWNHbzlNQS0tJnM9Y29uc3VtZXJzZWNyZXQmeD1hYQ -
所以我认为你的client_id
错了。
第二个问题是您的 redirect_uri ,redirect_uri应该与您在应用中设置的回调域匹配。
请指定成功进行身份验证后应用程序将返回的域。 Yahoo OAuth流程在授权访问其私有数据后,会将用户重定向到此域(或其子域)上的URL。
因此redirect_uri
必须是域名,而http://localhost:8080
不符合此要求。在我的测试中,我只使用了localhost.com
:
public async Task<string> AuthorizeWithYahoo()
{
var clientId = "<My client id>";
var StartUri = new Uri($"https://api.login.yahoo.com/oauth2/request_auth?client_id={clientId}&response_type=code&redirect_uri=http://localhost.com");
var EndUri = new Uri("http://localhost.com");
WebAuthenticationResult WebAuthenticationResult = await WebAuthenticationBroker.AuthenticateAsync(WebAuthenticationOptions.None,
StartUri, EndUri);
if (WebAuthenticationResult.ResponseStatus == WebAuthenticationStatus.Success)
{
var responseData = WebAuthenticationResult.ResponseData;
return responseData;
}
else if (WebAuthenticationResult.ResponseStatus == WebAuthenticationStatus.ErrorHttp)
{
return $"HTTP Error returned by AuthenticateAsync() : {WebAuthenticationResult.ResponseErrorDetail.ToString()}";
}
else
{
return $"Error returned by AuthenticateAsync() : {WebAuthenticationResult.ResponseStatus.ToString()}";
}
}
答案 1 :(得分:0)
第二个问题是你的redirect_uri,redirect_uri应该与你在应用中设置的回拨域相匹配。
重定向URL,可以在我的localhost中设置为Visual Studio上的开发人员吗?