为什么我得到System.UnauthorizedAccessException拒绝访问路径'Google.Apis.Auth'被拒绝

时间:2014-05-01 10:15:51

标签: c# asp.net iis-7 google-drive-api

我已经为文件管理实现了谷歌驱动器功能,它在本地系统中正常运行,但每当我在Godaddy服务器上托管它时都会抛出以下错误

  

System.UnauthorizedAccessException的       访问“Google.Apis.Auth”路径被拒绝。

以下代码我正在使用:

UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
   new ClientSecrets
   {
       ClientId = System.Configuration.ConfigurationManager.AppSettings["GDriveClientId"],//Get ClientID from web.config.
       ClientSecret = System.Configuration.ConfigurationManager.AppSettings["GDriveClientSecret"]//Get ClientSecret from web.config.
   },
   new[] { DriveService.Scope.Drive },
   System.Configuration.ConfigurationManager.AppSettings["GDriveCreatedByUser"],//Get UserName from web.config.
   CancellationToken.None).Result;

return credential;

我正在使用VS2010,IIS 7实现上述功能

3 个答案:

答案 0 :(得分:8)

扩展Chandrika已经说过的内容,ASP.NET用户需要对Google API客户端OAuth2库的永久存储文件夹具有读写权限。

其默认值为名为" Google.Apis.Auth"的文件夹。在Environment.SpecialFolder.ApplicationData中(通常对应于C:\Users\your-user-name\AppData\Roaming)。

或者,可以提供另一个文件夹作为GoogleWebAuthorizationBroker.AuthorizeAsync()方法的最后一个参数:

var folder = System.Web.HttpContext.Current.Server.MapPath("/App_Data/MyGoogleStorage");

UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
   new ClientSecrets
   {
       ClientId = "PutYourClientIdHere",
       ClientSecret = "PutYourClientSecretHere"
   },
   new[] { DriveService.Scope.Drive },
   "user",
   CancellationToken.None,
   new FileDataStore(folder)).Result;

return credential;

请参阅:https://developers.google.com/api-client-library/dotnet/guide/aaa_oauth#credentialshttps://developers.google.com/accounts/docs/OAuth2

答案 1 :(得分:2)

问题的根本原因:生成此问题是因为在验证身份验证请求后,其创建目录和令牌文件位于窗口的用户文件夹下 而且我们没有权利使用Godadday服务器的那个文件夹,所以它无法正常工作

解决方案:修改了google apis [filedatasource.cs]的源代码,以便在我们的目录中创建该文件,并添加它的引用,它将起作用

答案 2 :(得分:0)

我想你会在这里找到一个解决方案:Deploying ASP.NET to Windows Azure cloud, application gives error when running on cloud

您只需将IIS配置为使用FileDataStore。

从答案中复制以下内容:

A.如果您具有到Azure云的RDP访问权限,则更改IIS设置

1.Go to the IIS
2.Under sites select the Default site
3.Add Permission
4.choose I_User object and give read/write access.
5.later you can automate this setting using a batch file and startup task.

B.我认为你正在使用任何本地路径。您应该将此更改为本地存储以用于临时要求和blob存储以满足长期要求。