使用 Asp.Net MVc 获取 google 文档 api 刷新令牌和访问令牌
Get the google docs api refresh token and access token using Asp.Net MVc
任何人都可以帮助我在 asp .Net MVC 中首次获得 google 文档 api 刷新令牌。我有客户端 ID 和客户端秘密,从这里我应该如何获取刷新令牌,进一步从刷新令牌我应该如何获取访问令牌以访问驱动器的 google api。
他们还没有对 Drive API V3 的示例代码做很多工作。我不会使用所有这些范围选择您需要的范围此代码是预先生成的。
NuGet 包
/// <summary>
/// This method requests Authentication from a user using Oauth2.
/// Credentials are stored in System.Environment.SpecialFolder.Personal
/// Documentation https://developers.google.com/accounts/docs/OAuth2
/// </summary>
/// <param name="clientSecretJson">Path to the client secret json file from Google Developers console.</param>
/// <param name="userName">Identifying string for the user who is being authentcated.</param>
/// <returns>DriveService used to make requests against the Drive API</returns>
public static DriveService AuthenticateOauth(string clientSecretJson, string userName)
{
try
{
if (string.IsNullOrEmpty(userName))
throw new Exception("userName is required.");
if (!File.Exists(clientSecretJson))
throw new Exception("clientSecretJson file does not exist.");
// These are the scopes of permissions you need. It is best to request only what you need and not all of them
string[] scopes = new string[] { DriveService.Scope.Drive, // View and manage the files in your Google Drive
DriveService.Scope.DriveAppdata, // View and manage its own configuration data in your Google Drive
DriveService.Scope.DriveFile, // View and manage Google Drive files and folders that you have opened or created with this app
DriveService.Scope.DriveMetadata, // View and manage metadata of files in your Google Drive
DriveService.Scope.DriveMetadataReadonly, // View metadata for files in your Google Drive
DriveService.Scope.DrivePhotosReadonly, // View the photos, videos and albums in your Google Photos
DriveService.Scope.DriveReadonly, // View the files in your Google Drive
DriveService.Scope.DriveScripts}; // Modify your Google Apps Script scripts' behavior
UserCredential credential;
using (var stream = new FileStream(clientSecretJson, FileMode.Open, FileAccess.Read))
{
string credPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
credPath = Path.Combine(credPath, ".credentials/apiName");
// Requesting Authentication or loading previously stored authentication for userName
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(GoogleClientSecrets.Load(stream).Secrets,
scopes,
userName,
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
}
// Create Drive API service.
return new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "Drive Authentication Sample",
});
}
catch (Exception ex)
{
Console.WriteLine("Create Oauth2 DriveService failed" + ex.Message);
throw new Exception("CreateOauth2DriveFailed", ex);
}
}
服务帐户 Json 密钥文件不是 p12
/// <summary>
/// Authenticating to Google using a Service account
/// Documentation: https://developers.google.com/accounts/docs/OAuth2#serviceaccount
///
/// Note: Not all APIs support service accounts I cant garentee this will work. If you find an api that doesnt support service accoutns contact me
/// me at www.daimto.com and I will remove it from auto genration of this APIs sample project.
/// </summary>
/// <param name="serviceAccountEmail">From Google Developer console https://console.developers.google.com</param>
/// <param name="serviceAccountCredentialFilePath">Location of the Json Service account key file downloaded from Google Developer console https://console.developers.google.com</param>
/// <returns>DriveService used to make requests against the Drive API</returns>
public static DriveService AuthenticateServiceAccount(string serviceAccountCredentialFilePath)
{
try
{
if (string.IsNullOrEmpty(serviceAccountCredentialFilePath))
throw new Exception("Path to the .JSon service account credentials file is required.");
if (!File.Exists(serviceAccountCredentialFilePath))
throw new Exception("The service account credentials .JSon file does not exist at:" + serviceAccountCredentialFilePath);
// These are the scopes of permissions you need. It is best to request only what you need and not all of them
string[] scopes = new string[] { DriveService.Scope.Drive, // View and manage the files in your Google Drive
DriveService.Scope.DriveAppdata, // View and manage its own configuration data in your Google Drive
DriveService.Scope.DriveFile, // View and manage Google Drive files and folders that you have opened or created with this app
DriveService.Scope.DriveMetadata, // View and manage metadata of files in your Google Drive
DriveService.Scope.DriveMetadataReadonly, // View metadata for files in your Google Drive
DriveService.Scope.DrivePhotosReadonly, // View the photos, videos and albums in your Google Photos
DriveService.Scope.DriveReadonly, // View the files in your Google Drive
DriveService.Scope.DriveScripts}; // Modify your Google Apps Script scripts' behavior
Stream stream = new FileStream(serviceAccountCredentialFilePath, FileMode.Open, FileAccess.Read, FileShare.Read);
var credential = GoogleCredential.FromStream(stream).CreateScoped(scopes);
// Create the Drive service.
return new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "Drive Authentication Sample",
});
}
catch (Exception ex)
{
Console.WriteLine("Create service account DriveService failed" + ex.Message);
throw new Exception("CreateServiceAccountDriveServiceFailed", ex);
}
}
如果您需要其他任何东西,请告诉我我已经构建了部分示例项目。
任何人都可以帮助我在 asp .Net MVC 中首次获得 google 文档 api 刷新令牌。我有客户端 ID 和客户端秘密,从这里我应该如何获取刷新令牌,进一步从刷新令牌我应该如何获取访问令牌以访问驱动器的 google api。
他们还没有对 Drive API V3 的示例代码做很多工作。我不会使用所有这些范围选择您需要的范围此代码是预先生成的。
NuGet 包
/// <summary>
/// This method requests Authentication from a user using Oauth2.
/// Credentials are stored in System.Environment.SpecialFolder.Personal
/// Documentation https://developers.google.com/accounts/docs/OAuth2
/// </summary>
/// <param name="clientSecretJson">Path to the client secret json file from Google Developers console.</param>
/// <param name="userName">Identifying string for the user who is being authentcated.</param>
/// <returns>DriveService used to make requests against the Drive API</returns>
public static DriveService AuthenticateOauth(string clientSecretJson, string userName)
{
try
{
if (string.IsNullOrEmpty(userName))
throw new Exception("userName is required.");
if (!File.Exists(clientSecretJson))
throw new Exception("clientSecretJson file does not exist.");
// These are the scopes of permissions you need. It is best to request only what you need and not all of them
string[] scopes = new string[] { DriveService.Scope.Drive, // View and manage the files in your Google Drive
DriveService.Scope.DriveAppdata, // View and manage its own configuration data in your Google Drive
DriveService.Scope.DriveFile, // View and manage Google Drive files and folders that you have opened or created with this app
DriveService.Scope.DriveMetadata, // View and manage metadata of files in your Google Drive
DriveService.Scope.DriveMetadataReadonly, // View metadata for files in your Google Drive
DriveService.Scope.DrivePhotosReadonly, // View the photos, videos and albums in your Google Photos
DriveService.Scope.DriveReadonly, // View the files in your Google Drive
DriveService.Scope.DriveScripts}; // Modify your Google Apps Script scripts' behavior
UserCredential credential;
using (var stream = new FileStream(clientSecretJson, FileMode.Open, FileAccess.Read))
{
string credPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
credPath = Path.Combine(credPath, ".credentials/apiName");
// Requesting Authentication or loading previously stored authentication for userName
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(GoogleClientSecrets.Load(stream).Secrets,
scopes,
userName,
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
}
// Create Drive API service.
return new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "Drive Authentication Sample",
});
}
catch (Exception ex)
{
Console.WriteLine("Create Oauth2 DriveService failed" + ex.Message);
throw new Exception("CreateOauth2DriveFailed", ex);
}
}
服务帐户 Json 密钥文件不是 p12
/// <summary>
/// Authenticating to Google using a Service account
/// Documentation: https://developers.google.com/accounts/docs/OAuth2#serviceaccount
///
/// Note: Not all APIs support service accounts I cant garentee this will work. If you find an api that doesnt support service accoutns contact me
/// me at www.daimto.com and I will remove it from auto genration of this APIs sample project.
/// </summary>
/// <param name="serviceAccountEmail">From Google Developer console https://console.developers.google.com</param>
/// <param name="serviceAccountCredentialFilePath">Location of the Json Service account key file downloaded from Google Developer console https://console.developers.google.com</param>
/// <returns>DriveService used to make requests against the Drive API</returns>
public static DriveService AuthenticateServiceAccount(string serviceAccountCredentialFilePath)
{
try
{
if (string.IsNullOrEmpty(serviceAccountCredentialFilePath))
throw new Exception("Path to the .JSon service account credentials file is required.");
if (!File.Exists(serviceAccountCredentialFilePath))
throw new Exception("The service account credentials .JSon file does not exist at:" + serviceAccountCredentialFilePath);
// These are the scopes of permissions you need. It is best to request only what you need and not all of them
string[] scopes = new string[] { DriveService.Scope.Drive, // View and manage the files in your Google Drive
DriveService.Scope.DriveAppdata, // View and manage its own configuration data in your Google Drive
DriveService.Scope.DriveFile, // View and manage Google Drive files and folders that you have opened or created with this app
DriveService.Scope.DriveMetadata, // View and manage metadata of files in your Google Drive
DriveService.Scope.DriveMetadataReadonly, // View metadata for files in your Google Drive
DriveService.Scope.DrivePhotosReadonly, // View the photos, videos and albums in your Google Photos
DriveService.Scope.DriveReadonly, // View the files in your Google Drive
DriveService.Scope.DriveScripts}; // Modify your Google Apps Script scripts' behavior
Stream stream = new FileStream(serviceAccountCredentialFilePath, FileMode.Open, FileAccess.Read, FileShare.Read);
var credential = GoogleCredential.FromStream(stream).CreateScoped(scopes);
// Create the Drive service.
return new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "Drive Authentication Sample",
});
}
catch (Exception ex)
{
Console.WriteLine("Create service account DriveService failed" + ex.Message);
throw new Exception("CreateServiceAccountDriveServiceFailed", ex);
}
}
如果您需要其他任何东西,请告诉我我已经构建了部分示例项目。