我正在使用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
方法不允许我设置多个应用程序。
如何在不需要针对不同范围的多个不同令牌的情况下执行此操作? (一个用于日历,一个用于联系人等)
答案 0 :(得分:1)
在GoogleConsumer
项目中,DotNetOpenAuth.ApplicationBlock
类作为源代码提供给您。请随意修改它以满足您的需求。
答案 1 :(得分:1)
范围可以放在一个字符串中,用空格分隔
编辑:从海报的评论中添加
我在创建范围string
时使用以下代码:
foreach (String s in Scopes) {
sb.Append(String.Format("{0}", s));
}
scope = sb.ToString().Trim();
其中Scopes
是array
Strings
(String[]
),其中包含我要使用的范围。当您向Google请求授权时,您将在登录屏幕上看到所请求的服务列表。