playground - Requerir que Google devuelva la dirección de correo electrónico como parte de OAuth
google token app (7)
Aquí está la función ac # para cuando haya preautorizado la solicitud como se detalla arriba:
private void FetchUsersEmail(token)
{
var emailRequest = @"https://www.googleapis.com/userinfo/email?alt=json&access_token=" + token;
// Create a request for the URL.
var request = WebRequest.Create(emailRequest);
// Get the response.
var response = (HttpWebResponse) request.GetResponse();
// Get the stream containing content returned by the server.
var dataStream = response.GetResponseStream();
// Open the stream using a StreamReader for easy access.
var reader = new StreamReader(dataStream);
// Read the content.
var jsonString = reader.ReadToEnd();
// Cleanup the streams and the response.
reader.Close();
dataStream.Close();
response.Close();
dynamic json = JValue.Parse(jsonString);
var currentGoogleEmail = json.data.email;
}
( JValue
es parte de JSON.Net )
Estoy usando OAuth para acceder a Gmail con dotNetOAuth. ¿Cómo puedo obligar a Google a devolver la dirección de correo electrónico del usuario como parte de la devolución de llamada después de la autorización?
De forma predeterminada, la devolución de llamada de Google OAuth solo devuelve el token secreto y los tokens de acceso.
En php, la clase apiOauth2Service.php proporciona métodos para acceder a la información de usuario que ha iniciado sesión. Para esto puedes usar el método userinfo-> get (). Asegúrese de utilizar también el ámbito https://www.googleapis.com/auth/userinfo.email .
Esto funcionará con el mismo token de acceso. También debes intentar buscar en otras APIs para obtener información similar. Esto es mucho más fácil de ver a través de oAuth_playground >> http://code.google.com/apis/explorer/
OAuth no proporciona una facilidad para parámetros adicionales durante un apretón de manos de OAuth, por lo que no creo que pueda obligar a Google a suministrarlo. Sin embargo, es probable que haya una API de Google que pueda usar su token de acceso OAuth para llamar y obtener la dirección de correo electrónico después del saludo.
Primero debe agregar el siguiente alcance ( https://www.googleapis.com/auth/userinfo.email ) a su solicitud de auth.
Una vez que haya vuelto a su aplicación de Google y tenga su token de acceso, puede realizar una solicitud usando el token de acceso a https://www.googleapis.com/userinfo/email?alt=json
. Esto devolverá la dirección de correo electrónico. Más información en http://sites.google.com/site/oauthgoog/Home/emaildisplayscope
Si solicita el ámbito userinfo.email, Google devuelve un id_token junto con access_token.
El id_token se puede descifrar para proporcionar la dirección de correo electrónico del usuario, en www.googleapis.com?/oauth2/v1/tokeninfo?id_token=IDTOKENHERE
Más información aquí: https://developers.google.com/accounts/docs/OAuth2Login
solicite el alcance de OAuth para incluir el "alcance de visualización de correo electrónico" https://www.googleapis.com/auth/userinfo.email
scope="http://www.google.com/m8/feeds/ https://www.googleapis.com/auth/userinfo.email"
Luego usa la API REST como Hammock para obtener la dirección
RestClient client = new RestClient
{
Authority = "https://www.googleapis.com",
};
RestRequest request = new RestRequest
{
Path = "userinfo/email?alt=json",
Credentials = OAuthCredentials.ForProtectedResource(
this.requestSettings.ConsumerKey,
this.requestSettings.ConsumerSecret,
this.requestSettings.Token,
this.requestSettings.TokenSecret)
};
var response = client.Request(request);
For getting the Email Id, you need to add the scope "https://wwww.googleapis.com/auth/userinfo.email"
Then you will get id_token in the response.
Response={
"access_token" : "ya29.eAG__HY8KahJZN9VmangoliaV-Jn7hLtestkeys",
"token_type" : "Bearer",
"expires_in" : 3600,
"id_token" : "id_token_from_server",
"refresh_token" : "1/GIHTAdMo6zLVKCqNbA"
}
Then use this id_token as below POST request:
https://www.googleapis.com/oauth2/v1/tokeninfo?id_token=id_token_from_server
And you will get response like below:
Response={
"issuer": "accounts.google.com",
"issued_to": "80780.apps.googleusercontent.com",
"audience": "8078909.apps.googleusercontent.com",
"user_id": "1118976557884",
"expires_in": 3598,
"issued_at": 1456353,
"email": "[email protected]",
"email_verified": true
}
Make sure you add "www" in the APIs as shown above...