从令牌c#获取用户信息

时间:2013-03-18 07:26:22

标签: c# .net oauth dotnetopenauth

我已成功通过他们的api从Google提供商那里获得了上述oauth身份验证的密钥令牌。

让我们考虑“access-token”是xxxii-xxxxx-xxx-xxxxx-xxxxx,其范围为https://www.googleapis.com/auth/userinfo.profile

现在当我点击带有访问令牌的浏览器来检索用户信息值时

https://www.googleapis.com/oauth2/v1/userinfo?access_token=xxxii-xxxxx-xxx-xxxxx-xxxxx;

我的回复是

{
 "id": "XXXXXXXXXXXXXX",
 "name": "XXXXXXXXXXXXXXXX",
 "given_name": "XXXXXXXXXXX",
 "family_name": "X",
 "picture": "XXXXXXXXXX/photo.jpg",
 "locale": "en"
}

我的问题是,当我通过代码解析上述请求时,我没有得到响应,因为我通过浏览器

我使用的代码是

String userInfo = "https://www.googleapis.com/oauth2/v1/userinfo?access_token="+token;
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(userInfo);
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(resp.GetResponseStream());

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"];

Response.Write(info);  

作为回应我得到空引用。

和我在行中出现的错误

JObject jsonResp = JObject.Parse(userInfo);

作为

  

解析值时遇到意外的字符:h。第1行,第1位。

堆栈追踪:

  

at Newtonsoft.Json.JsonTextReader.ParseValue(Char currentChar)          at Newtonsoft.Json.JsonTextReader.ReadInternal()          at Newtonsoft.Json.JsonTextReader.Read()          at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader)          at Newtonsoft.Json.Linq.JObject.Parse(String json)          位于d:\ Oauth \ WebSite3 \ Default.aspx.cs中的_Default.getresponse(字符串标记):第99行

等待您宝贵的建议和意见

1 个答案:

答案 0 :(得分:3)

使用此代码获取用户信息:

var userInfoUrl = "https://www.googleapis.com/oauth2/v1/userinfo"; 
var hc = new HttpClient();
hc.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authToken);
var response = hc.GetAsync(userInfoUrl).Result;
dynamic userInfo = response.Content.ReadAsAsync().Result;
return userInfo;

有一篇关于dotnetopenoauth和google api整合的好文章:http://www.dotnetopenauth.net/documentation/securityscenarios/