Требовать, чтобы Google возвращал адрес электронной почты как часть OAuth
Я использую OAuth для доступа к Gmail с помощью dotNetOAuth. Как заставить Google вернуть адрес электронной почты пользователя в качестве части обратного вызова после авторизации?
По умолчанию обратный вызов Google OAuth возвращает только токен и токены доступа.
Ответы
Ответ 1
OAuth не предоставляет возможности для дополнительных параметров во время рукопожатия OAuth, поэтому я не думаю, что вы можете заставить Google его предоставить. Вероятно, Google API, однако, вы можете использовать токен доступа OAuth для вызова, чтобы получить адрес электронной почты после установления связи.
Ответ 2
Сначала вам нужно добавить следующую область (https://www.googleapis.com/auth/userinfo.email) к вашему запросу oauth.
После того, как вы вернетесь в свое приложение из Google и у вас есть токен доступа, вы можете сделать запрос, используя токен доступа, в https://www.googleapis.com/userinfo/email?alt=json
.
Это вернет адрес электронной почты. Дополнительная информация на http://sites.google.com/site/oauthgoog/Home/emaildisplayscope
Ответ 3
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...
Ответ 4
запросить область OAuth для включения "Экран отображения электронной почты" https://www.googleapis.com/auth/userinfo.email
scope="http://www.google.com/m8/feeds/ https://www.googleapis.com/auth/userinfo.email"
Затем используйте REST API, например Hammock, чтобы получить адрес
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);
Ответ 5
Здесь функция С#, когда вы предварительно авторизировали запрос, как описано выше:
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
является частью JSON.Net)
Ответ 6
В php класс apiOauth2Service.php предоставляет методы для доступа к зарегистрированной информации о пользователе. Для этого вы можете использовать метод userinfo- > get(). Убедитесь, что вы также используете область https://www.googleapis.com/auth/userinfo.email.
Это будет работать с тем же токеном доступа. Также вы должны попробовать искать в других API-интерфейсах для получения подобной информации взамен. Это намного проще просмотреть через oAuth_playground → http://code.google.com/apis/explorer/
Ответ 7
Если вы запрашиваете область userinfo.email, Google возвращает id_token вместе с access_token.
id_token может быть незашифрован для предоставления адреса электронной почты пользователя по адресу: www.googleapis.com?/oauth2/v1/tokeninfo?id_token=IDTOKENHERE
Дополнительная информация здесь: https://developers.google.com/accounts/docs/OAuth2Login