如何使用OAuth使用DotNetOpenAuth.AspNet和Microsoft.AspNet.Membership.OpenAuth从各种提供商处获取个人资料图像?

时间:2013-12-15 11:01:01

标签: c# asp.net oauth

我已经创建了一个使用OAuth身份验证和通用连接器的Web应用程序,如本tutorial中所述,并开始捏造一些,以增加对其他提供商(如Yahoo和LinkedIn)的支持。因此,身份验证部分可以工作,用户可以在asp.net成员资格提供程序中创建此外,所有提供程序都返回accessstoken,我认为可以使用它来检索有关用户的更多信息。

我真的很想获取个人资料图片,但似乎每个提供商都有不同的方式来请求这些信息。 Twitter甚至通过更改HTTP标头信息来描述authorise every request的方法。

虽然在各个提供商的网站上阅读此信息,但我想知道此功能是否也已包含在DotNetOpenAuth.AspNetMicrosoft.AspNet.Membership.OpenAuth实施中的某个位置。

如何使用DotNetOpenAuth.AspNet和/或Microsoft.AspNet.Membership.OpenAuth使用刚刚获得的accessstoken请求登录用户的个人资料图片?

响应Leo的回答更新

我使用以下代码在LinkedIn的API上进行调用。

string accessToken = extraData["accesstoken"]; // Extra Data received from OAuth containing the accesstoken.
WebRequest request = WebRequest.Create("https://api.linkedin.com/v1/people/~:(id,first-name,last-name,date-of-birth,email-address,picture-url)?oauth2_access_token=" + accessToken);
using (WebResponse response = request.GetResponse())
{
   // do something with response here.
}

错误消息是“远程服务器返回错误:(401)未经授权。”。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

答案很简单......你不能使用任何这些。这些是OAuth和OAuth的包装器,仅指定如何对用户进行身份验证。现在,要请求用户的个人资料照片,您需要使用外部提供商自己的API,并且您很可能需要一个有效的访问令牌。因此,您需要使用其中一个OAuth实现来验证用户并接收访问令牌,将访问令牌存储在某处(通常是cookie),然后使用访问令牌对提供者的API进行后续调用。示例和链接......

Facebook的Graph API允许您检索用户个人资料

https://developers.facebook.com/docs/graph-api/quickstart/

请注意,上面链接中的所有示例都要求您在名为access_token的参数中包含访问令牌,例如

https://graph.facebook.com/me?method=GET&format=json&suppress_http_code=1&access_token={your-access-token}

谷歌...

https://www.googleapis.com/oauth2/v3/userinfo?access_token={your-access-token}

... LinkedIn

https://api.linkedin.com/v1/people/~:(id,first-name,last-name,date-of-birth,email-address,picture-url)?oauth2_access_token={your-access-token}

您可以从这些提供商的网站获取更具体的信息

如果您对我有任何其他疑问,请告诉我,因为我之前已经实施了类似的内容。

干杯,狮子座