{"id":55000409,"date":"2023-12-01T00:00:00","date_gmt":"2023-12-19T15:03:07","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=409"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"GoogleToken_per_DLL_holen","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/GoogleToken_per_DLL_holen\/","title":{"rendered":"Google-Token per DLL holen"},"content":{"rendered":"<p><b>Wenn wir Daten eines Google-Kontos wie beispielsweise Google Calendar programmieren wollen, um diese abzurufen oder zu bearbeiten, ben&ouml;tigen wir verschiedene Dinge. Das erste ist eine Anwendung, die wir wie im Artikel &#8220;Google Calendar programmieren: Vorbereitungen&#8221; erl&auml;utern. Das erste Resultat ist die Definition einer Anwendung. Das zweite, wichtige Ergebnis sind zwei f&uuml;r den Zugang notwendige Daten, n&auml;mlich ClientID und ClientSecret. Mit diesen k&ouml;nnen wir dann online ein OAuth2-Token holen, das wir wiederum f&uuml;r den Zugriff auf die Rest-API von Google ben&ouml;tigen. Im vorliegenden Artikel zeigen wir, wie man ClientID und ClientSecret nutzt, um das begehrte Token auszulesen. Dazu erstellen wir eine COM-DLL, die wir von Office-Anwendungen, VB6 oder twinBASIC aus nutzen k&ouml;nnen, um &uuml;ber die Rest-API von Google beispielsweise auf Kalenderdaten zugreifen zu k&ouml;nnen.<\/b><\/p>\n<h2>OAuth2-Token &#8211; woher nehmen?<\/h2>\n<p>Das Objekt unserer Begierde f&uuml;r den Zugriff auf die Rest-API beispielsweise des Google Calendars ist ein sogenanntes Token. Um dieses zu erhalten, sind einige Voraussetzungen zu erf&uuml;llen.<\/p>\n<p>Als Erstes m&uuml;ssen wir ein Projekt erstellen, in dessen Kontext wir auf die Rest-API zugreifen wollen. Ist dieses Projekt angelegt, erhalten wir von Google zwei Informationen: die <b>ClientID <\/b>und das <b>ClientSecret<\/b>. Wie wir an diese Informationen kommen, beschreiben wir im Artikel <b>Google Calendar programmieren: Vorbereitungen <\/b>(<b>www.vbentwickler.de\/408<\/b>).<\/p>\n<p>Nun wollen wir die Daten des Google Calendars f&uuml;r einen bestimmten Benutzer auslesen oder bearbeiten. Beziehungsweise m&ouml;chten wir dem Benutzer eine Anwendung zur Verf&uuml;gung stellen, mit der er auf seinen Google Calendar zugreifen kann. Damit dies gelingt, ben&ouml;tigt er ein Token. Dieses Token wird auf Basis von <b>ClientID <\/b>und <b>ClientSecret <\/b>unseres Projekts und einer Anmeldung des Benutzers mit seinen Benutzerdaten erzeugt. Diese Anmeldung erfordert die Anzeige eines Web-Dialogs von Google, wo der Benutzer seine Daten eingibt. Danach k&ouml;nnen wir das Token auslesen. All dies erledigen wir mit einer COM-DLL, wie wir sie in diesem Artikel beschreiben. Wir &uuml;bergeben dieser die <b>ClientID <\/b>und das <b>ClientSecret <\/b>und ermitteln das Token. Beim ersten Aufruf muss der Benutzer seine Daten eingeben, danach erst wieder nach einer bestimmten Zeit &#8211; in der Zwischenzeit kann das einmal generierte Token verwendet werden.<\/p>\n<h2>Warum mit Visual Studio?<\/h2>\n<p>Warum erledigen wir diese Aufgabe mit einer COM-DLL auf Basis von .NET &#8211; k&ouml;nnen wir dies nicht mit VB, VBA oder twinBASIC programmieren? Das ist vielleicht m&ouml;glich, aber unter .NET finden wir fertige Pakete, die das Ermitteln des Tokens wesentlich vereinfachen. Wir ben&ouml;tigen dazu lediglich ein NuGet-Paket, das wir dem Projekt hinzuf&uuml;gen und anschlie&szlig;end mit wenigen Codezeilen nutzen k&ouml;nnen.<\/p>\n<h2>Visual Studio als Administrator starten<\/h2>\n<p>Die ben&ouml;tigte COM-DLL erstellen wir also mit Visual Studio .NET. Damit wir es gleich von Visual Studio aus registrieren k&ouml;nnen, m&uuml;ssen wir dieses als Administrator starten &#8211; dabei hilft ein Rechtsklick auf den Eintrag <b>Visual Studio 2022 <\/b>(oder andere Version) und Auswahl des Befehls <b>Als Administrator &ouml;ffnen<\/b>.<\/p>\n<h2>Neues Projekt erstellen<\/h2>\n<p>Als Erstes erstellen wir ein neues Projekt namens <b>amvGoogleOAuth2<\/b> mit dem Typ <b>Klassenbibliothek (.NET Framework<\/b>). Die einzige Klasse, die wir nun im Projektmappen-Explorer vorfinden, benennen wir von <b>Class1 <\/b>in <b>GoogleOAuth2 <\/b>um. Stimmen wir der folgenden Meldung zu, wird der Klassenname auch gleich in den Code &uuml;bernommen.<\/p>\n<h2>Eigenschaften des Projekts &auml;ndern<\/h2>\n<p>Nun &ouml;ffnen wir die Projekteigenschaften und aktivieren den Bereich <b>Anwendung<\/b>. Hier klicken wir auf die Schaltfl&auml;che <b>Assemblyinformationen&#8230; <\/b>und &ouml;ffnen so den Dialog <b>Assemblyinformationen<\/b>. Hier k&ouml;nnen wir alle Einstellungen beibehalten au&szlig;er der Option <b>Assembly COM-sichtbar machen<\/b>, die wir aktivieren (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_409_002.png\" alt=\"Aktivieren der Option Assembly COM-sichtbar machen\" width=\"574,6265\" height=\"409,3622\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Aktivieren der Option Assembly COM-sichtbar machen<\/span><\/b><\/p>\n<p>Danach wechseln wir zum Bereich <b>Kompilieren <\/b>und aktivieren dort die Option <b>F&uuml;r COM-Interop registrieren<\/b> (siehe Bild 2). Au&szlig;erdem m&uuml;ssen wir die Einstellung f&uuml;r die Eigenschaft <b>Ziel-CPU <\/b>pr&uuml;fen. Wenn diese auf <b>AnyCPU <\/b>eingestellt ist, kann es sein, dass direkt f&uuml;r x64 kompiliert wird &#8211; was ein Problem ist, wenn wir von einer 32-Bit-Office-Anwendung darauf zugreifen wollen. Solltest Du also Office in der 32-Bit-Version nutzen, stellst Du sicherheitshalber hier den Wert <b>x86 <\/b>ein.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_409_004.png\" alt=\"Einstellen der richtigen Ziel-CPU\" width=\"699,627\" height=\"580,9715\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Einstellen der richtigen Ziel-CPU<\/span><\/b><\/p>\n<p>Damit k&ouml;nnen wir die Eigenschaften speichern und schlie&szlig;en.<\/p>\n<h2>NuGet-Paket hinzuf&uuml;gen<\/h2>\n<p>Nun &ouml;ffnen wir mit dem Men&uuml;befehl <b>Projekt|NuGet-Pakete verwalten&#8230; <\/b>den Bereich zum Verwalten der <b>NuGet<\/b>-Pakete. Hier wechseln wir zur Registerseite <b>Durchsuchen <\/b>und geben den Suchbegriff <b>Google Calendar <\/b>ein.<\/p>\n<p>Den nun erscheinenden Eintrag <b>Google.Apis.Calendar.v3 <\/b>w&auml;hlen wir aus und f&uuml;gen diesen mit einem Klick auf die Schaltfl&auml;che <b>Installieren <\/b>zum Projekt hinzu (siehe Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_409_003.png\" alt=\"Installieren des Pakets Google.Apis.Calendar.V3\" width=\"699,627\" height=\"406,614\" \/><\/p>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000409\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000409?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000409\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"9445dca723\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn wir Daten eines Google-Kontos wie beispielsweise Google Calendar programmieren wollen, um diese abzurufen oder zu bearbeiten, ben&ouml;tigen wir verschiedene Dinge. Das erste ist eine Anwendung, die wir wie im Artikel &#8220;Google Calendar programmieren: Vorbereitungen&#8221; erl&auml;utern. Das erste Resultat ist die Definition einer Anwendung. Das zweite, wichtige Ergebnis sind zwei f&uuml;r den Zugang notwendige Daten, n&auml;mlich ClientID und ClientSecret. Mit diesen k&ouml;nnen wir dann online ein OAuth2-Token holen, das wir wiederum f&uuml;r den Zugriff auf die Rest-API von Google ben&ouml;tigen. Im vorliegenden Artikel zeigen wir, wie man ClientID und ClientSecret nutzt, um das begehrte Token auszulesen. Dazu erstellen wir eine COM-DLL, die wir von Office-Anwendungen, VB6 oder twinBASIC aus nutzen k&ouml;nnen, um &uuml;ber die Rest-API von Google beispielsweise auf Kalenderdaten zugreifen zu k&ouml;nnen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662023,66062023,44000035],"tags":[],"yst_prominent_words":[],"class_list":["post-55000409","post","type-post","status-publish","format-standard","hentry","category-662023","category-66062023","category-COMDLLs_programmieren"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000409","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000409"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000409\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000409"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000409"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000409"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000409"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}