2016-04-22 6 views
0

Ich habe versucht, mich mit Yahoo von meiner UWP App anzumelden.Yahoo OAuth gibt Fehler mit WebAuthenticationBroker zurück

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

Enduri ist http://localhost:8080/

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

Es ist richtig das Zeichen in zeigt aber nach Zeichen in es zeigt Fehlerseite enter image description here

wenn wir in der Nähe drücken wird es richten Ich auf der Yahoo-Homepage statt die Zustimmung des Benutzers zu fragen. Wer hat eine Idee, warum das passiert?

Antwort

1

Es gibt zwei Probleme in Ihrer Autorisierungs-URL.

Erstens ist die client_id in Ihrer URL nicht richtig. Normalerweise client_id ist am Ende mit -, die client_id in Authorization Code Flow for Server-side App zum Beispiel verwendet wird, ist es

dj0yJmk9ak5IZ2x5WmNsaHp6JmQ9WVdrOVNqQkJUMnRYTjJrbWNHbzlNQS0tJnM9Y29uc3VtZXJzZWNyZXQmeD1hYQ--

Also ich denke, Ihr client_id in falsch.

Das zweite Problem ist Ihre redirect_uri sollte die redirect_uri entspricht die Rückruf Domain Sie in Ihrer Anwendung festgelegt haben. enter image description here

Bitte geben Sie die Domäne an, zu der Ihre Anwendung nach erfolgreicher Authentifizierung zurückkehren wird. Yahoo OAuth Flow leitet Benutzer nur dann auf eine URL um, wenn diese den Zugriff auf ihre privaten Daten autorisiert.

Also redirect_uri müssen eine Domäne sein und http://localhost:8080 erfüllen diese Anforderung nicht. In meinem Test habe ich nur localhost.com zum Beispiel:

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()}"; 
    } 
} 

Und nach Zeichen in, Sie so etwas wie sehen: enter image description here

0

Das zweite Problem ist Ihr redirect_uri, sollte die redirect_uri die Callback-Domain übereinstimmen Sie haben in Ihrer App festgelegt.

Die Redirect-URL, kann in meinem localhost zu Entwicklern auf Visual Studio ??