在我们的应用程序中,我们有以下设置:
Web Application (Angular JS) + Web API
我们支持外部登录Google& Facebook的。
我们在启动期间设置了必要的基础设施,其中包含默认范围和连线。这适用于登录。
对于其他功能,例如用户想要从Google导入他/她的联系人,我们需要再次获得新范围的同意。有人能告诉我怎么做吗?
一种方法是 - 在登录阶段包含所有必要的范围,但我们希望在所需的时间仅获得所需内容的同意。
我用Google搜索但无法获得有关此内容的任何信息。
在我们从Google a / c导入联系人的特定情况下,我考虑使用GoogleAuthorizationCodeFlow
(没有OWIN
中间件)专门创建新控制器并启动新的身份验证机制,如此处所述{{3但是它位于MVC
的上下文中,但我们需要支持Web API
。所以任何指针都受到高度赞赏。
答案 0 :(得分:1)
终于得到了解决方案。
以下链接帮了很多忙;我的解决方案是以下链接的想法组合:
http://www.yogihosting.com/implementing-google-contacts-api-version-3-0-oauth-2-0-in-csharp-and-asp-net/ (注意:本文中提到的Google OAuth链接,特别是用于令牌生成的链接已更改。有关正确的网址,请参阅https://developers.google.com/identity/protocols/OAuth2WebServer)
以上链接说明了如何获取access_token和authorization_code。获得这些值后,我们可以创建可用于访问特定Google API的UserCredentials,如下面的链接所示:
Upload video to youtube with mvc application (all code behind)
要记住的事情:
Google API token endpoint POST returns Bad Request 400
访问Google API时,我们需要包含过滤器。在我的People API案例中,我需要获取电子邮件地址并且没有必需的过滤器,它始终为null / empty。所以,下面是代码:
var peopleService = new PeopleService(new BaseClientService.Initializer()
{
HttpClientInitializer = credentials,
ApplicationName = "MyApp",
});
var connList = peopleService.People.Me.Connections.List();
connList.RequestMaskIncludeField = "person.emailAddresses";
connList.PageSize = 500;
ListConnectionsResponse connectionsResponse = connList.Execute();
IList<Person> connections = connectionsResponse.Connections;
如果没有connList.RequestMaskIncludeField = "person.emailAddresses";
,则电子邮件地址始终为空。
希望这有助于某人。