GoogleWebAuthorizationBroker.AuthorizeAsync在生产服务器上超时

时间:2015-06-07 23:50:22

标签: c# google-api google-api-dotnet-client

我正在尝试根据我们的目录对我们的Google Apps用户进行身份验证,以限制访问我们的一些内部应用程序。 它在我的桌面上运行完美,但不能在我们的生产服务器上运行。它挂在GoogleWebAuthorizationBroker.AuthorizeAsync()

它会在GoogleStorage中按原样创建Google.DP.Auth文件夹,但它永远不会创建Google.Apis.Auth.OAuth2.Responses.TokenResponse-user文件。我甚至都没有获得同意屏幕。但是,如果我将“Google.Apis.Auth.OAuth2.Responses.TokenResponse-user”从我的桌面复制到服务器,它可以在所有后续请求中正常工作。

在我的绝望中,我已经覆盖了我自己的GoogleWebAuthorizationBrokerAuthorizationCodeInstalledAppLocalServerCodeReceiver类,并且发现它永远不会超过var context = await listner.GetContextAsync().ConfigureAwait(false);的行LocalServerCodeReceiver课程。 (这只是这样做,所以我可以将一些调试信息扔到服务器上的日志中,以弄清楚发生了什么) 这是我的代码

protected void Page_Load(object sender, EventArgs e)
    {
        if(!Page.IsPostBack)
        {
            googleGo();
        }
    }
protected async void googleGo()
    {
     var f = new Google.Apis.Util.Store.FileDataStore(Server.MapPath("~/App_Data/GoogleStore/DP.Google.Auth"));
        UserCredential credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
            new ClientSecrets { 
                ClientId = "XX", 
                ClientSecret = "YY" },
            new[] { 
                DirectoryService.Scope.AdminDirectoryGroupMember, 
                DirectoryService.Scope.AdminDirectoryGroupReadonly, 
                Oauth2Service.Scope.UserinfoEmail,
                Oauth2Service.Scope.UserinfoProfile },
            "user",
            System.Threading.CancellationToken.None,
            f);
        Oauth2Service service = new Oauth2Service(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = "Test"

            });
        var userinfo = service.Userinfo.Get();
        var s = userinfo.Execute();
 }

希望我错过了一些人可以指出的简单方法。 提前谢谢。

0 个答案:

没有答案