将 Google Drive API 托管到 IIS 后上传失败.将错误显示为无法启动浏览器 [英] Google Drive API upload Fails after hosting it to IIS. showing the error as Failed to launch the Browser with

查看:37
本文介绍了将 Google Drive API 托管到 IIS 后上传失败.将错误显示为无法启动浏览器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的应用程序中使用谷歌外部登录,我需要一个功能,用户可以将图像从应用程序上传到他的谷歌驱动器.

I am using google external login in my application, and I need a functionality that user can upload images from the application to his google drive.

在我的本地主机代码中,谷歌驱动器文件上传功能工作正常,在将其托管给 IIS 用户后无法上传图像.

In my localhost code the google drive file uploading functionality working fine, after hosting it to IIS user unable to upload the image.

我创建了一个错误日志文件.因为我发现了以下异常:

I have created an error log file. in that I found the below exception:

System.AggregateException:发生一个或多个错误.---> System.NotSupportedException:无法使用https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&response_type=code&client_id=347588538121-jeali0jufd389gqsi4ge22ent3939b4m.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A60931%2Fauthorize%2F&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive" 进行授权.有关详细信息,请参阅内部异常.---> System.ComponentModel.Win32Exception: 访问被拒绝

System.AggregateException: One or more errors occurred. ---> System.NotSupportedException: Failed to launch browser with "https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&response_type=code&client_id=347588538121-jeali0jufd389gqsi4ge22ent3939b4m.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A60931%2Fauthorize%2F&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive" for authorization. See inner exception for details. ---> System.ComponentModel.Win32Exception: Access is denied

在redirect_uri 中我找到了localhost".但是托管后应该是www.abc.com,而且这里的端口号也总是变化的.

In the redirect_uri I found "localhost". but after hosting it should be www.abc.com, and the port number is also always varying here.

在 stachoverflow 和其他网站上进行了多种尝试.但没有找到解决办法.

Tried in many ways from the stachoverflow and other websites. but did not find the solution.

请帮我解决这个问题.

谢谢.

试过

credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
    obj,
    Scopes,
    "user",
    CancellationToken.None,
    new FileDataStore(AppDomain.CurrentDomain.BaseDirectory + "Daimto.GoogleDrive.Auth.Store")
).Result;

还有:

using (var stream = new FileStream(Path.Combine(AppDomain.CurrentDomain.BaseDirectory) + "credentials.json", FileMode.Open, FileAccess.Read))
{
    // The file token.json stores the user's access and refresh tokens, and is created
    // automatically when the authorization flow completes for the first time.
    string credPath = AppDomain.CurrentDomain.BaseDirectory + "token.json";
    credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
        GoogleClientSecrets.Load(stream).Secrets,
        Scopes,
        "user",
        CancellationToken.None,
        new FileDataStore(credPath, true)).Result;
}

推荐答案

您正在使用 GoogleWebAuthorizationBroker.AuthorizeAsync,它专为与已安装的应用程序一起使用而设计.它跨越了运行它的机器上的网络浏览器.当您在本地工作时,这将正常工作,但当您尝试在服务器上运行它时它将失败,因为您无权在服务器上生成浏览器(并不是说它会有所帮助,因为用户不会看到它)

You are using GoogleWebAuthorizationBroker.AuthorizeAsync which is designed for use with installed applications. It spanws the web browser on the machine that it runs on. This will work fine when you are working locally but it will fail when you try to run it on a server as you dont have access to spawn a browser on the server (not that it would help as the user will not see it)

你应该使用的是这样的

private static readonly IAuthorizationCodeFlow flow =
        new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
            {
                ClientSecrets = new ClientSecrets
                {
                    ClientId = "PUT_CLIENT_ID_HERE",
                    ClientSecret = "PUT_CLIENT_SECRET_HERE"
                },
                Scopes = new[] { DriveService.Scope.Drive },
                DataStore = new FileDataStore("Drive.Api.Auth.Store")
            });

可以在此处找到完整示例 Web 应用程序 (ASP.NET MVC)

A full example can be found here Web applications (ASP.NET MVC)

这篇关于将 Google Drive API 托管到 IIS 后上传失败.将错误显示为无法启动浏览器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆