google example auth c# oauth-2.0 windows-phone-8.1 continuations

c# - example - login xamarin android



OAuth2 WebAuthenticationBroker en Windows Phone no se devuelve a ContinuationManager (2)

Estoy haciendo autenticación OAuth2 en mi aplicación Windows Phone 8.1 y estoy usando WebAuthenticationBroker con el método AuthenticateAndContinue() para WP.
Me estoy autenticando en mi servidor donde envío dos parámetros y devuelve mi token de acceso, sin ningún otro paso entre ellos. Dada esta situación, no tengo un callbakUri, entonces uso WebAuthenticationBroker.GetCurrentApplicationCallbackUri()

Mi código se ve así:

Uri endpointURL = new Uri(_requestUrl + "&client_id=" + clientId + "&client_secret=" + clientSecret); Uri callbackUri = WebAuthenticationBroker.GetCurrentApplicationCallbackUri(); WebAuthenticationBroker.AuthenticateAndContinue(endpointURL, callbackUri, null, WebAuthenticationOptions.None);

Tengo la clase ContinuationManager.cs en mi proyecto, así como todos los cambios necesarios en la App.xaml.cs , como se describe aquí: http://msdn.microsoft.com/en-us/library/dn631755.aspx

Mi problema es que después de ejecutar el código anterior, el método Continue() en la clase ContinuationManager nunca se ejecuta, por lo que mi aplicación se bloquea allí.

¿Me estoy perdiendo de algo?


WebAuthenticationBroker.AuthenticateAndContinue sabe que la autenticación se realiza cuando el usuario se redirige a una página específica.

Hay dos formas de lidiar con eso:

  1. La mayoría de los servicios aceptan un parámetro para configurar el URI al que se redirige al usuario (el parámetro a menudo se llama callback . En ese caso, puede generar un URI con WebAuthenticationBroker.GetCurrentApplicationCallbackUri y pasarlo al método WebAuthenticationBroker.AuthenticateAndContinue (como lo está haciendo) en tu muestra de código)

  2. Si el servicio no acepta un parámetro de devolución de llamada, entonces debe hacer las cosas de la otra manera: primero compruebe qué URI redirige el servicio también (llamándolo manualmente una vez), luego pase este URI al método WebAuthenticationBroker.AuthenticateAndContinue . Por ejemplo, supongamos que el servicio OAuth redirige a http://www..com , luego debe llamar:

    WebAuthenticationBroker.AuthenticateAndContinue(endpointURL, new Uri("http://www..com"), null, WebAuthenticationOptions.None);


Parece que está utilizando la subvención de credenciales del cliente . Este es un flujo no interactivo, y no necesita un WebAuthenticationBroker para usarlo. Simplemente use un HttpClient para obtener el token, si está usando este flujo .

Dicho esto, este flujo probablemente no sea lo que necesita. En primer lugar, supongo que desea autenticar al usuario real, también conocido como el propietario del recurso. En segundo lugar, el flujo que está utilizando requiere que el secreto del cliente esté presente en la aplicación de su teléfono. Eso es un gran no-no! ¡Este flujo está destinado a procesos del lado del servidor!

Creo que debes mirar la concesión del código de autorización en su lugar.