在GData API中重复使用Google API凭据



我正在尝试制作一个使用ASP.NET MVC 5的web应用程序,使用该应用程序我可以使用Google帐户对用户进行身份验证,然后从存储在Google Drive/Google Sheets中的用户电子表格中读取数据。

我正在使用Google API对用户进行身份验证。在用户成功通过身份验证后,我在一个类型为Google.Apis.Auth.OAuth2.Web AuthResult.UserCredential 的对象中从Google取回凭据

然后,我可以使用类似的代码成功创建一个服务,从Drive列出文件

var driveService = new DriveService(new BaseClientService.Initializer { HttpClientInitializer = result.Credential, ApplicationName = "ASP.NET MVC Sample" });

现在,我想使用GData API从Drive中的电子表格中读取内容。为了实现这一点,我需要有一个SpreadsheetsService对象,然后将它的RequestFactory参数设置为GOAuth2RequestFactory的实例,而这又需要在类OAuth2Parameters的实例中指定OAuth2参数。

如何在GData Api中重用使用Google Api获得的凭据?

我已经在做你想做的事情了,

我如何传递GData令牌的代码谷歌电子表格的OAuth2身份验证问题

即,我使用单个OAuth2访问/刷新令牌集。对两个gdata调用使用相同的令牌&驱动API调用。

这是最终为我工作的代码

public class AppFlowMetadata : FlowMetadata
        {
            private static readonly IAuthorizationCodeFlow flow =
                new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
                {
                    ClientSecrets = new ClientSecrets
                    {
                        ClientId = "randomstring.apps.googleusercontent.com",
                        ClientSecret = "shhhhhh!"
                    },
                    Scopes = new[] { DriveService.Scope.Drive, "https://spreadsheets.google.com/feeds", "https://docs.google.com/feeds", "https://www.googleapis.com/auth/userinfo.email", "https://www.googleapis.com/auth/userinfo.profile" },
                    DataStore = new FileDataStore("Drive.Api.Auth.Store")
                });
            public override string GetUserId(Controller controller)
            {
                var user = controller.Session["user"];
                if (user == null)
                {
                    user = Guid.NewGuid();
                    controller.Session["user"] = user;
                }
                return user.ToString();
            }
            public override IAuthorizationCodeFlow Flow { get { return flow; } }
        }

然后,在控制器中,OAuth2参数被复制到GData

var result = await new AuthorizationCodeMvcApp(this, new AppFlowMetadata()).
                AuthorizeAsync(cancellationToken);
OAuth2Parameters parameters = new OAuth2Parameters();
                parameters.ClientId = "somestring.apps.googleusercontent.com";
                parameters.ClientSecret = "shhhhhh!";
                parameters.Scope = result.Credential.Token.Scope;
                parameters.AccessToken = result.Credential.Token.AccessToken;
                parameters.RefreshToken = result.Credential.Token.RefreshToken;
                GOAuth2RequestFactory requestFactory = new GOAuth2RequestFactory(null, "MySpreadsheetIntegration-v1", parameters);
                SpreadsheetsService service = new SpreadsheetsService("MySpreadsheetIntegration-v1");
                service.RequestFactory = requestFactory;

相关内容

  • 没有找到相关文章

最新更新