访问令牌后访问Google API获取个人资料
我对OAuth Arena和Google ApI非常陌生,但我想在此实现的目标非常简单。访问令牌后访问Google API获取个人资料
用户点击谷歌连接按钮和我的web服务应该能够让所有的用户资料信息从谷歌服务器:
我已经写代码来获得的accessToken(我还没有测试它),但是假设工作正常,现在我应该如何让Google API给我用户配置文件?我在GoogleConsumer类中看到名为Get Contacts的静态函数,但我没有看到获取profiledata的任何选项。可能有我缺少的东西?
这里使用我的代码,我得到的accessToken:
IConsumerTokenManager tokenManager =
new LocalTokenManager(consumerKey,consumerSecret);
var googleConsumer =
new WebConsumer(GoogleConsumer.ServiceDescription, tokenManager);
var tokenResult = googleConsumer.ProcessUserAuthorization();
return tokenResult.AccessToken;
现在,我如何得到用户的个人资料出来的吗?
一旦你有你ACCESS_TOKEN(访问类型下线;和范围/权限设置,以便您可以获取用户信息),你可以试试下面的(未测试,请让我知道如果发生任何错误):
string userInfo = "";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(action);
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(resp.GetResponseStream());
userInfo = "https://www.googleapis.com/oauth2/v1/userinfo?access_token=" + "YOUR_ACCESSTOKEN";
sr.Close();
JObject jsonResp = JObject.Parse(userInfo);
string info="";
info += "<h3>" + jsonResp.Root["name"] + "</h3>";
info += "<img src='" + jsonResp.Root["picture"] + "' width='120'/><br/>";
info += "<br/>ID : " + jsonResp.Root["id"];
info += "<br/>Email : " + jsonResp.Root["email"];
info += "<br/>Verified_email : " + jsonResp.Root["verified_email"];
info += "<br/>Given_name : " + jsonResp.Root["given_name"];
info += "<br/>Family_name : " + jsonResp.Root["family_name"];
info += "<br/>Link : " + jsonResp.Root["link"];
info += "<br/>Gender : " + jsonResp.Root["gender"];
Response.Write(info);
流程:请求获取访问令牌的google userinfo url,获取响应并显示信息。
那么,我现在没有mu visual studio,我会在一个小时左右尝试,但是只是想让你知道我在一个不在WEB应用环境中的web服务环境。这会工作吗? – TeaLeave 2012-04-19 15:01:11
如果用户已经登录(因为他们应该是因为你有访问令牌),那么它应该没问题。请仔细检查您是否拥有登录用户,并确定了所有范围/权限。让我知道。 – 2012-04-19 15:09:25
我认为你的代码是非常有用的,我可以使用它,而一旦我有accessToken。实际上,我正在研究获取请求令牌的逻辑(稍微落后于计划)。一旦我实施它,我会保持更新。 – TeaLeave 2012-04-19 16:50:31
让我知道您对使用GET方法访问个人资料的Google信息有什么看法,这里描述的是https://developers.google.com/+/api/latest/people/get? 这是我的C#示例。
string urlGoogle = "https://www.googleapis.com/plus/v1/people/me";
HttpWebRequest client = HttpWebRequest.Create(urlGoogle) as HttpWebRequest;
client.Method = "GET";
client.Headers.Add("Authorization", "Bearer " + accessToken);
using (HttpWebResponse response = (HttpWebResponse)client.GetResponse())
{
using (Stream dataStream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(dataStream))
{
if (response.StatusCode == HttpStatusCode.OK)
{
var json = new JavaScriptSerializer();
var data = json.Deserialize<IDictionary<string, object>>(reader.ReadToEnd());
//....... here in data you have all json fields for the profile
您的代码片段似乎没有正确格式化。您可能希望删除一些缩进。 – ne1410s 2014-12-13 14:51:01
大家好,我不知道为什么enyone还没有触及这个问题。如果我缺乏任何信息,请告诉我。基本上,我惊奇地发现,所有这些WebConsumer(GoogleConsumer和TwitterConsumer)都具有getContacts,UpdateStatus和PostBlog等所有复杂功能,但没有像GetProfile这样的基本功能。我在网上看到的所有示例实际上都会得到USerprofile gy在Google的webservice URL上调用GET,但我没有看到任何演示如何使用GoogleWebConsume检索userProfile的内容。是不可能的? – TeaLeave 2012-04-17 19:43:21
不[此SO帖子](http://stackoverflow.com/questions/7130648/get-user-info-via-google-api)回答你的问题? – shrisha 2012-04-18 00:01:27
嗯,这篇文章说我们可以使用https://www.googleapis.com/auth/userinfo.profile作为范围。这个范围恰好适用于哪里?我是否在RequestAuthorization Call上使用它?因为我试图把这个URL放在上面,但它不需要字符串参数。 – TeaLeave 2012-04-18 01:28:11