使用Google OAuth开发MVC应用程序以访问驱动器API。我在开发环境中访问Google API时效果很好。但是,当我在IIS或共享主机中部署它时,它显示访问被拒绝,具有以下异常。
[Win32Exception (0x80004005): Access is denied]
System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo) +602
System.Diagnostics.Process.Start(ProcessStartInfo startInfo) +60
Google.Apis.Auth.OAuth2.<ReceiveCodeAsync>d__14.MoveNext() +265
[NotSupportedException: Failed to launch browser with "https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&response_type=code&client_id=1062976495544-dg9ak1e6uovp7p6gmlf1vcqvvq6mnefv.apps.googleusercontent.com&redirect_uri=http:%2F%2Flocalhost:7862%2Fauthorize%2F&scope=https:%2F%2Fwww.googleapis.com%2Fauth%2Fdrive" for authorization. See inner exception for details.]
Google.Apis.Auth.OAuth2.<ReceiveCodeAsync>d__14.MoveNext() +1029
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +31
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +60
Google.Apis.Auth.OAuth2.<AuthorizeAsync>d__8.MoveNext() +730
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +31
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +60
Google.Apis.Auth.OAuth2.<AuthorizeAsync>d__4.MoveNext() +571
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +31
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +60
Google.Apis.Auth.OAuth2.<AuthorizeAsync>d__1.MoveNext() +438
我尝试过的事情:
答案 0 :(得分:1)
本文可帮助我解决此问题: Implementing OAuth2.0 Authorization For Google In ASP.NET。
工作原理(按文章):
"~/Resources/driveApiCredentials/drive-credentials.json/Google.Apis.Auth.OAuth2.Responses.TokenResponse-{account}"
。之后,只需对驱动器使用google身份验证:
// Client for requests
private DriveService client;
// Class constructor
public GoogleDrive(string account)
{
UserCredential credential;
Login = account;
// Load Web Secret file
using (var stream =
new FileStream(System.Web.HttpContext.Current.Server.MapPath($"~/Resources/client_secret_{account}.json"), FileMode.Open, FileAccess.Read))
{
// Path to token folder
string credPath = System.Web.HttpContext.Current.Server.MapPath(Path.Combine("~/Resources/driveApiCredentials", "drive-credentials.json"));
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
Scopes,
account,
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
//Console.WriteLine("Credential file saved to folder: " + credPath);
}
// Create Drive API service.
var service = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = account,
});
client = service;
}
此代码使用之前加载的令牌进行初始化DriveService
。