.net - playground - google oauth api
API de configuración de correo electrónico de Google Apps con.Net y OAuth 2.0 (2)
Para la API de configuración de correo electrónico y cualquier otra clase de GData que sea Servicios, puede usar algo como lo siguiente:
using Google.GData.Apps;
using Google.GData.Apps.GoogleMailSettings;
using Google.GData.Client;
// Name of my cli application
string applicationName = "Test-OAuth2";
// Installed (non-web) application
string redirectUri = "urn:ietf:wg:oauth:2.0:oob";
// Requesting access to Contacts API and Groups Provisioning API
string scopes = "https://apps-apis.google.com/a/feeds/emailsettings/2.0/";
// Stuff usually found on client_secrets.json
string clientId = CLIENT_ID;
string clientSecret = CLIENT_SECRET;
string domain = CLIENT_DOMAIN;
// Prepare OAuth parameters
OAuth2Parameters parameters = new OAuth2Parameters() {
ClientId = clientId,
ClientSecret = clientSecret,
RedirectUri = redirectUri,
Scope = scopes
};
// Request authorization from the user
string url = OAuthUtil.CreateOAuth2AuthorizationUrl(parameters);
Console.WriteLine("Authorize URI: " + url);
// Fetch the access code from console
parameters.AccessCode = Console.ReadLine();
// Get an access token
OAuthUtil.GetAccessToken(parameters);
try {
// Create a new request factory so it uses our OAuth credentials
GOAuth2RequestFactory requestFactory = new GOAuth2RequestFactory("apps", applicationName, parameters);
GoogleMailSettingsService service = new GoogleMailSettingsService(domain, applicationName);
service.RequestFactory = requestFactory;
// Update the signature for the user testUserName
service.UpdateSignature("[email protected]", "My tiny signature");
} catch (AppsException a) {
Console.WriteLine("A Google Apps error occurred.");
Console.WriteLine();
Console.WriteLine("Error code: {0}", a.ErrorCode);
Console.WriteLine("Invalid input: {0}", a.InvalidInput);
Console.WriteLine("Reason: {0}", a.Reason);
}
Puede ver un ejemplo completo en las muestras de OAuth provistas con GData aquí: https://code.google.com/p/google-gdata/source/browse/trunk/clients/cs/samples/oauth2_sample/oauth2demo.cs
Para otras clases de GData que usan Solicitudes, el flujo es similar, pero en su lugar crea un objeto RequestSettings y lo pasa al constructor de objetos de solicitud GData como se muestra aquí: https://code.google.com/p/google-gdata/source/ browse / trunk / clients / cs / samples / oauth2_sample / oauth2demo.cs # 63
Deseo utilizar la API de configuración de correo electrónico, pero no puedo encontrar ninguna documentación sobre cómo usar esta API con la autenticación oAuth2
- ¿Estoy usando la API correcta?
- ¿Estoy usando la última API? (Google.GData.Apps.dll versión 2.2.0)
- ¿Cómo puedo usar este DLl con un proyecto de la consola de google con el archivo p12 y la cuenta de servicio?
Según la documentación de Google, esta es la última configuración de correo electrónico de la API: https://developers.google.com/admin-sdk/email-settings/
No puedo encontrar ninguna documentación en esta página sobre cómo usarla en .Net con Oauth, pero en el ejemplo veo esto:
using Google.GData.Apps;
using Google.GData.Apps.GoogleMailSettings;
GoogleMailSettingsService service = new GoogleMailSettingsService("yourdomain", "your-apps");
service.setUserCredentials("adminUsername", "adminPassword");
service.CreateSendAs("liz", "Sales", "[email protected]", "", "true");
Por lo tanto, al buscar estas referencias, encuentro esta página: https://code.google.com/p/google-gdata/ o el paquete nuget: www.nuget.org/packages/Google.GData.Apps/, la última versión es 2.2 .0
Dado que estamos cambiando a la nueva API que usa los proyectos de consola Oauth2 y la cuenta de servicio, mi pregunta es, ¿puedo usar el dll también usando la misma autenticación que para la API más nueva?
las nuevas API usan este método de autenticación:
X509Certificate2 certificate = new X509Certificate2(@"/location/P12File.p12", "notasecret", X509KeyStorageFlags.Exportable);
IEnumerable<string> scopes = new[] { DirectoryService.Scope.AdminDirectoryUser, DirectoryService.Scope.AdminDirectoryUserSecurity };
ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer("[email protected]")
{
Scopes = scopes,
User = "[email protected]"
}.FromCertificate(certificate));
// Create the service.
var service = new DirectoryService(
new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "Admin directory Provisioning Sample",
});
service.Users.Delete(userKey).Execute();
Tomé el ejemplo para crear el flujo de OAuth desde el directorio API https://developers.google.com/admin-sdk/directory/v1/quickstart/dotnet y lo usé para conectarme al servicio de API de configuración de correo electrónico.
static string[] Scopes = { "https://apps-apis.google.com/a/feeds/emailsettings/2.0/" };
static string ApplicationName = "your-apps";
static void Main(string[] args)
{
UserCredential credential;
using (var stream =
new FileStream("../../client_secret.json", FileMode.Open, FileAccess.Read))
{
string credPath = System.Environment.GetFolderPath(
System.Environment.SpecialFolder.Personal);
credPath = Path.Combine(credPath, ".credentials");
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
Scopes,
"user",
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
Console.WriteLine("Credential file saved to: " + credPath);
}
OAuth2Parameters parameter = new OAuth2Parameters()
{
AccessToken = credential.Token.AccessToken
};
GOAuth2RequestFactory requestFactory = new GOAuth2RequestFactory("apps", ApplicationName, parameter);
GoogleMailSettingsService service = new GoogleMailSettingsService("example.com", ApplicationName);
service.RequestFactory = requestFactory;
service.CreateSendAs("liz", "Sales", "[email protected]", "", "true");
Console.Read();
}