OWIN外部OAuth提供程序 - 获得用户对新范围的同意

时间:2017-02-20 17:47:05

标签: oauth-2.0 asp.net-web-api2

在我们的应用程序中,我们有以下设置:

Web Application (Angular JS) + Web API

我们支持外部登录Google& Facebook的。

我们在启动期间设置了必要的基础设施,其中包含默认范围和连线。这适用于登录。

对于其他功能,例如用户想要从Google导入他/她的联系人,我们需要再次获得新范围的同意。有人能告诉我怎么做吗?

一种方法是 - 在登录阶段包含所有必要的范围,但我们希望在所需的时间仅获得所需内容的同意。

我用Google搜索但无法获得有关此内容的任何信息。

在我们从Google a / c导入联系人的特定情况下,我考虑使用GoogleAuthorizationCodeFlow(没有OWIN中间件)专门创建新控制器并启动新的身份验证机制,如此处所述{{3但是它位于MVC的上下文中,但我们需要支持Web API。所以任何指针都受到高度赞赏。

1 个答案:

答案 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

https://www.themarketingtechnologist.co/google-oauth-2-enable-your-application-to-access-data-from-a-google-user/

以上链接说明了如何获取access_token和authorization_code。获得这些值后,我们可以创建可用于访问特定Google API的UserCredentials,如下面的链接所示:

Upload video to youtube with mvc application (all code behind)

要记住的事情:

  1. 最终会联系Google授权服务器两次(一次用于访问令牌,一次用于授权代码)。在这两种情况下,必须指定redirect_uri,并且在两种情况下,redirect_uri都是SAME的重要性;否则它不会起作用。此外,重要的是在定义项目/应用程序并注册的Google控制台中提及redirect_uri。由于redirect_uri值不匹配,我遇到了问题,以下链接帮我解决了问题:
  2. Google API token endpoint POST returns Bad Request 400

    1. 访问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;

    2. 如果没有connList.RequestMaskIncludeField = "person.emailAddresses";,则电子邮件地址始终为空。

      希望这有助于某人。