Yahoo OAuth使用WebAuthenticationBroker返回错误

时间:2016-04-22 05:51:48

标签: authentication oauth uwp win-universal-app yahoo-api

我试图从我的UWP应用程序使用雅虎登录。

StartUri是https://api.login.yahoo.com/oauth2/request_auth?response_type=code&scope=openid&client_id=dj0yJmk9TDNtd2MxeGNMT1pUJmQ9WVdrOVQwVlNVbFpQTkdjbWNHbzlNQS0tJnM9Y29uc3VtZXJzZWNyZXQmeD05Mw&redirect_uri=http://localhost:8080

EndUri是http://localhost:8080/

 WebAuthenticationResult WebAuthenticationResult = await WebAuthenticationBroker.AuthenticateAsync(
                                            WebAuthenticationOptions.None,
                                            StartUri,
                                            EndUri);

正确显示登录信息 但登录后显示错误页面 enter image description here

如果我们按下它会将我引导到雅虎主页,而不是要求用户同意。有谁知道为什么会这样?

2 个答案:

答案 0 :(得分:1)

您的授权网址存在两个问题。

首先,您网址中的 client_id 不正确。通常情况下,使用Authorization Code Flow for Server-side App中的client_idclient_id最终会使用 - ,它是

  

dj0yJmk9ak5IZ2x5WmNsaHp6JmQ9WVdrOVNqQkJUMnRYTjJrbWNHbzlNQS0tJnM9Y29uc3VtZXJzZWNyZXQmeD1hYQ -

所以我认为你的client_id错了。

第二个问题是您的 redirect_uri ,redirect_uri应该与您在应用中设置的回调域匹配。enter image description here

  

请指定成功进行身份验证后应用程序将返回的域。 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()}";
    }
}

登录后,您会看到以下内容: enter image description here

答案 1 :(得分:0)

  

第二个问题是你的redirect_uri,redirect_uri应该与你在应用中设置的回拨域相匹配。

重定向URL,可以在我的localhost中设置为Visual Studio上的开发人员吗?