google + api中缺少name,given_name和family_name json属性,获取用户信息

时间:2019-04-10 06:10:11

标签: c# oauth google-api google-oauth

我已经创建了Google api服务应用,并确认默认情况下已添加user.profile信息范围。

身份验证,令牌和获取用户信息对我来说工作正常,但是获取用户信息api响应中缺少几个字段。

我正在使用以下提到的端点与Google api通信。


WebRequest request = WebRequest.Create(googleGetUrl + $"&access_token={accesstoken}");
request.Credentials = CredentialCache.DefaultCredentials;

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
    using (Stream receiveStream = response.GetResponseStream())
    {
        using (StreamReader readStream = new StreamReader(receiveStream))
        {
            string responseFromServer = readStream.ReadToEnd();

            return JsonConvert.DeserializeObject<GoogleUser>(responseFromServer);
        }
    }
}

我正在收到如下所述的json响应

{
  id: "xxxxxxxxxxxxx",
  email: "dummy@email.com",
  verified_email: true,
  picture: "https://validurl/photo.jpg",
  hd: "getting value"
}

但是我想要的像下面提到的Json一样

{
  id: "xxxxxxxxxxxxx",
  email: "dummy@email.com",
  verified_email: true,
  picture: "https://validurl/photo.jpg",
  hd: "getting value",
  name: "some value",
  family_name: "some value",
  given_name: "some value"
}

范围配置:

enter image description here

如果我错过任何配置,请告诉我。您的帮助将不胜感激。

亲切的问候, 莫辛

2 个答案:

答案 0 :(得分:0)

userinfo端点的响应不是标准的,所有oauth服务器都有自己的实现,以实现返回的结果。如果要获取更多信息,请尝试people api。除非您请求电子邮件范围,否则任何人都不应返回电子邮件。我认为Google几年前就停止返回verify_email。

GET /v1/people/me HTTP/1.1
Host: people.googleapis.com
Content-length: 0
Authorization: Bearer aJxKQvzgCj5fa86EbB_AYqjt-

答案 1 :(得分:0)

我在身份验证URL中缺少作用域参数,并且在下面的URL中使用对我有用。

返回string.Format(                     “ https://accounts.google.com/o/oauth2/auth?client_id= {0}&redirect_uri = {1}&response_type = code&scope = {2}”,                     客户编号,                     CallBackUrl,                     “ https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email”);

亲切的问候, 莫欣·帕坦