使用 ASP.NET 实现 Yahoo! 联系人阅读器






4.92/5 (36投票s)
使用 Yahoo! 联系人 API 和 ASP.NET 实现 Yahoo! 联系人阅读器应用程序
引言
随着新社交网站的推出或电子邮件营销成为在线业务成功的关键因素,邮件联系人阅读器已成为一项令人兴奋的功能。我曾参与过多个项目,其中应用程序可以方便地从用户的个人邮件帐户中读取电子邮件联系人。大多数用户都使用 Gmail/Hotmail/AOL/Yahoo 等免费邮件服务,还有很多。大部分时间,我使用第三方解决方案(这为我节省了大量时间),这些解决方案效果很好。但这些解决方案并不容易根据我的需求进行定制。所以这次,我决定自己寻找一个稳定的解决方案,并从非常流行的邮件服务 Yahoo! 开始。本文将对那些正在使用联系人阅读器应用程序的人以及对使用 Yahoo! API 感兴趣的人有所帮助。
Yahoo! API
Yahoo! 开发者网络 (YDN) 是 Yahoo! 的开发者资源中心。YDN 包含面向开发者的工具/实用程序/小工具/API 文档和示例。您可以通过注册 API 密钥来开始使用提供的资源,然后就可以开始使用了。
使用 Yahoo! 进行身份验证和授权
Yahoo! 提供 3 种方式来连接其服务,第一种是 OpenID 用于验证用户身份,第二种是 OAuth 用于控制对受保护数据的访问,第三种是 OpenID-OAuth 混合协议,它在单个接口中结合了 OpenID 身份验证和 OAuth 授权。我认为 OAuth 最具说服力,并且将在本文中继续使用它。如果您想了解其他 2 种身份验证模型,我建议您 点击此链接。在深入了解 OAuth 模型实现之前,让我们通过快速回顾 OAuth 基本机制来刷新我们的思路。
OAuth 身份验证基础知识
OAuth 是行业标准授权方法,在各种平台上使用。它是一种开放的授权模型,主要基于现有标准,可确保不同软件平台安全地配置和验证凭据。最简单的定义是,OAuth 协议使用户无需共享密码即可向第三方提供对其 Web 资源的访问权限(您可以在 此处 找到有关身份验证的详细信息)。OAuth 是一种安全快速地发布和访问私有数据(如联系人列表和更新)的方式,这就是为什么我选择 OAuth 模型来检索用户联系人信息的原因。
您可以从以下链接下载与 .NET 兼容的示例代码/文档
设置 Yahoo! OAuth
为了使用 Yahoo! OAuth,我们必须遵循一系列步骤
- 注册并获取 Consumer Key:在您开始发出 Yahoo! API 请求之前,您需要注册并提交一些关于您的应用程序的详细信息。
- 获取 Request Token:Request Token 是一个临时令牌,用于启动您应用程序的用户授权。Request Token 告诉 Yahoo! 您已获得用户批准。
- 获取用户授权:从 Yahoo! 获取 Request Token 后,您的应用程序会向您的用户显示一个 Yahoo! 授权页面,要求他们授予您的应用程序访问其数据的权限。
- 交换 Request Token 和 OAuth Verifier 以获取 Access Token:在您的用户授权您的应用程序访问其信息后,您的应用程序需要用已批准的 Request Token 交换 Access Token,这告诉 Yahoo! 您的应用程序已被授予访问用户数据的权限。
- 刷新 Access Token:您可以将 Access Token 使用一个小时,直到其过期。要获取新的 Access Token 以继续使用,请使用相同的过期令牌和
get_token
调用来获取新的 Access Token。
让我们看看 OAuth 如何与 Yahoo! API 一起工作
设置 API Key
您可以通过导航到 此链接 来申请 API 密钥。您需要填写 Web 表单才能申请密钥。共有 2 个步骤。第一步是填写应用程序特定的信息并申请 API 密钥,第二步是指定 API 密钥可以访问哪些服务。您可以选择访问所有公共资源,或者另外,您可以指定您特别感兴趣的服务。
步骤 1:设置应用程序信息并获取 API Key
配置说明
- 应用程序 URL:这是您的应用程序所在的 URL。您可以在此处指向应用程序的根目录。对于我的应用程序,我将 http:www.imgalib.com/ 设为应用程序 URL。
- 选择一个合适的应用程序名称(我的应用程序名称是
qcontactreader
)。 - 指定应用程序类型,我的示例应用程序是基于 Web 的。
- 提供有关您应用程序的简短描述。
- 访问范围:选择“此应用程序需要访问私有用户数据”选项,因为我的示例应用程序将访问用户联系人列表。
- 点击
Get
API Key,您就可以开始使用了。
步骤 2:使用 API Key 指定权限
配置说明
- 选择 Yahoo Contact API 并允许读取权限。此 API 允许应用程序查看和/或从 Yahoo! Contacts 应用程序导入用户的联系人数据。
请记住,上述说明用于根据我的需求配置应用程序。请随时根据您的应用程序需求进行配置。
使用示例代码
示例代码已通过图 2 中提到的步骤进行了简化。如步骤 2 函数中所述
private string GetRequestToken()
{
string authorizationUrl = string.Empty;
OAuthBase oauth = new OAuthBase();
Uri uri = new Uri("https://api.login.yahoo.com/oauth/v2/get_request_token");
string nonce = oauth.GenerateNonce();
string timeStamp = oauth.GenerateTimeStamp();
string normalizedUrl;
string normalizedRequestParameters;
string sig = oauth.GenerateSignature
(uri, ConsumerKey, ConsumerSecret, string.Empty,
string.Empty, "GET", timeStamp, nonce,
OAuthBase.SignatureTypes.PLAINTEXT, out normalizedUrl,
out normalizedRequestParameters); //OAuthBase.SignatureTypes.HMACSHA1
StringBuilder sbRequestToken = new StringBuilder(uri.ToString());
sbRequestToken.AppendFormat("?oauth_nonce={0}&", nonce);
sbRequestToken.AppendFormat("oauth_timestamp={0}&", timeStamp);
sbRequestToken.AppendFormat("oauth_consumer_key={0}&", ConsumerKey);
sbRequestToken.AppendFormat("oauth_signature_method={0}&",
"PLAINTEXT"); //HMAC-SHA1
sbRequestToken.AppendFormat("oauth_signature={0}&", sig);
sbRequestToken.AppendFormat("oauth_version={0}&", "1.0");
sbRequestToken.AppendFormat("oauth_callback={0}",
HttpUtility.UrlEncode("http://www.imgalib.com/demo/yahoo-oauth/default.aspx"));
..........
..........
...........
}
此函数构建请求以通过 oAuth 连接 Yahoo! 并接收 Request token,然后使用此 token 请求访问用户地址簿,方法是请求 Access token
private void GetAccessToken(string oauth_token, string oauth_verifier)
{
OAuthBase oauth = new OAuthBase();
Uri uri = new Uri("https://api.login.yahoo.com/oauth/v2/get_token");
string nonce = oauth.GenerateNonce();
string timeStamp = oauth.GenerateTimeStamp();
string sig = ConsumerSecret + "%26" + OauthTokenSecret;
StringBuilder sbAccessToken = new StringBuilder(uri.ToString());
sbAccessToken.AppendFormat("?oauth_consumer_key={0}&", ConsumerKey);
sbAccessToken.AppendFormat("oauth_signature_method={0}&",
"PLAINTEXT"); //HMAC-SHA1
sbAccessToken.AppendFormat("oauth_signature={0}&", sig);
sbAccessToken.AppendFormat("oauth_timestamp={0}&", timeStamp);
sbAccessToken.AppendFormat("oauth_version={0}&", "1.0");
sbAccessToken.AppendFormat("oauth_token={0}&", oauth_token);
sbAccessToken.AppendFormat("oauth_nonce={0}&", nonce);
sbAccessToken.AppendFormat("oauth_verifier={0}", oauth_verifier);
................
................
}
此步骤将提示用户出现一个权限窗口。如果用户允许应用程序读取其联系人列表,则列表将通过以下方式检索:
private void RetriveContacts()
{
Uri uri = new Uri("http://social.yahooapis.com/v1/user/" +
OauthYahooGuid + "/contacts?format=XML");
.........
.........
}
如果您想运行示例代码,您需要经过几个步骤,首先是设置上面描述的 API Key。然后将应用程序托管在服务器上,因为 Yahoo! 需要与您提供的回调 URL 进行通信。打开 default.aspx 并将这些属性值更改为您各自注册的密钥
public string ConsumerKey
{
get
{
return "YOUR_CONSUMER_KEY";
}
}
public string ConsumerSecret
{
get
{
return "YOUR_CUSTOMER_SECRET_KEY";
}
}
打开 GetRequestToken()
函数,将回调 URL 更改为您自己的回调 URL
sbRequestToken.AppendFormat("oauth_callback={0}",
HttpUtility.UrlEncode("http://www.yoursite.com/yahoo-oauth/default.aspx"));
就是这样,您可以开始使用了。您还可以 访问此链接 查找有关 Yahoo! oauth 请求格式或 联系人 API 的更多详细信息。此外,您还可以从 此处 下载用于此示例代码的库。
在线演示
在托管的实时应用程序 Yahoo! 联系人阅读器演示 中尝试此应用程序。
资源
OAuthBase
类,支持HMAC-SHA1
、RSA-SHA1
和PLAINTEXT
签名方法,由 Andrew Arnott 先生贡献
历史
- 2010 年 7 月 5 日:首次发布