使用DotNetOpenAuth获取联系人&来自Google帐户的日历

时间:2011-07-13 15:54:06

标签: asp.net-mvc c#-4.0 dotnetopenauth

我正在使用ASP.NET MVC3(C#)编写Web应用程序,我需要从登录用户的Google帐户中获取日历和联系人。

因为我不想存储用户的凭据,所以我使用的是OAuth(但不使用OpenID - 我不希望我的用户使用他们的Google帐户登录)。

我有以下代码来获取访问令牌,然后使用它来获取数据:

var google = new WebConsumer(GoogleConsumer.ServiceDescription, this.TokenManager);

// Is Google calling back with authorization?
var accessTokenResponse = google.ProcessUserAuthorization();
if (accessTokenResponse != null) {
    this.AccessToken = accessTokenResponse.AccessToken;
    //SAVE ACCESS TOKEN TO DATABASE
} else if (this.AccessToken == null) {
    // If we don't yet have access, immediately request it.
    GoogleConsumer.RequestAuthorization(google, GoogleConsumer.Applications.Contacts);
}

不幸的是,正如您所看到的,我只是要求对联系人进行授权,RequestAuthorization方法不允许我设置多个应用程序。

如何在不需要针对不同范围的多个不同令牌的情况下执行此操作? (一个用于日历,一个用于联系人等)

2 个答案:

答案 0 :(得分:1)

GoogleConsumer项目中,DotNetOpenAuth.ApplicationBlock类作为源代码提供给您。请随意修改它以满足您的需求。

答案 1 :(得分:1)

范围可以放在一个字符串中,用空格分隔

编辑:从海报的评论中添加

我在创建范围string时使用以下代码:

foreach (String s in Scopes) {
    sb.Append(String.Format("{0}", s));
}
scope = sb.ToString().Trim();

其中Scopesarray StringsString[]),其中包含我要使用的范围。当您向Google请求授权时,您将在登录屏幕上看到所请求的服务列表。