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

Posted

技术标签:

【中文标题】google + api 中缺少 name、given_name 和 family_name json 属性获取用户信息【英文标题】:name, given_name and family_name json property are missing in google + api get user info 【发布时间】:2019-08-31 12:18:01 【问题描述】:

我已经创建了 google api services 应用并验证了 user.profile 信息范围是默认添加的。

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

我正在使用下面提到的端点与 google api 进行通信。

身份验证:https://accounts.google.com/o/oauth2/v2/auth 检索令牌:https://accounts.google.com/o/oauth2/token 获取用户信息:https://www.googleapis.com/oauth2/v2/userinfo?access_token=xxxxxxxxxx 和 https://www.googleapis.com/oauth2/v1/userinfo?access_token=xxxxxxxxxx
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

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

亲切的问候, 莫辛

【问题讨论】:

试试这个 api => https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token=youraccess_token 我猜您选择的端点版本根本不支持这些名称字段。我会联系 Google 支持,或者查看这篇类似的文章:***.com/questions/7130648/…。它列出了您可以使用的其他来源。 我也试过googleapis.com/oauth2/v1/…这个。同样的结果没有运气。 @MohsinkhanPathan,这可能对你有帮助 => ***.com/a/22459811/5514820 我已添加范围配置快照。 【参考方案1】:

我在身份验证 URL 中缺少范围参数,并且使用以下 URL 对我有用。

返回字符串.Format( "https://accounts.google.com/o/oauth2/auth?client_id=0&redirect_uri=1&response_type=code&scope=2", 客户编号, 回调网址, "https://www.googleapis.com/auth/userinfo.profilehttps://www.googleapis.com/auth/userinfo.email");

亲切的问候, 莫辛帕坦

【讨论】:

【参考方案2】:

来自 userinfo 端点的响应不是标准的,所有 oauth 服务器都有自己的实现,它们将返回什么。如果您想获得更多信息,您应该尝试people api。除非您请求电子邮件范围,否则任何人都不应返回电子邮件。我想谷歌几年前就停止返回verified_email了。

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

【讨论】:

你可以使用filter参数只看到你想要的字段

以上是关于google + api 中缺少 name、given_name 和 family_name json 属性获取用户信息的主要内容,如果未能解决你的问题,请参考以下文章

Google Places API 中缺少 Google Maps 中的地点

Google Maps Geocoding API,其 JS api 中缺少的 API 功能(?)

缺少 API 级别 25 的 Google API

Google Cloud Translation API 请求缺少有效的 API 密钥

Google Cloud Vision API 的 Web 检测功能中缺少描述?

Google Drive API v3 Python文件中缺少某些文件()。list()