{"id":55000141,"date":"2018-08-01T00:00:00","date_gmt":"2020-03-27T19:33:18","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=141"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Authentifizierung_nachruesten","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Authentifizierung_nachruesten\/","title":{"rendered":"Authentifizierung nachr&uuml;sten"},"content":{"rendered":"<p><b>Im Artikel &#8220;Authentifizierung unter ASP.NET Core&#8221; haben wir gezeigt, wie Sie eine ASP.NET Core-Anwendung erstellen und diese direkt mit Funktionen f&uuml;r die Authentifizierung ausstatten. In anderen Artikeln wiederum haben wir L&ouml;sungen beschrieben, in denen wir zun&auml;chst ohne die Authentifizierung gestartet sind. Nun wollen wir beides zusammenf&uuml;hren. Aber was tun, wenn die L&ouml;sung noch nicht die f&uuml;r die Authentifizierung notwendigen Elemente enth&auml;lt &#8211; nachr&uuml;sten oder neu mit Authentifizierung erstellen und dann die L&ouml;sung &uuml;bertragen Dieser Artikel zeigt den einfacheren Weg.<\/b><\/p>\n<p><b>Voraussetzungen: <\/b>.NET Core 2.1<\/p>\n<p>Der Assistent zum Erstellen neuer ASP.NET Core-Anwendung liefert eine wirklich brauchbare Basis f&uuml;r neue Anwendungen. Noch sch&ouml;ner ist, dass er das Framework f&uuml;r die Realisierung einer Authentifizierung optional mitliefert und gleich noch die Links zur Registrierung und zur Anmeldung sowie die zur Verwaltung notwendigen hinzuf&uuml;gt.<\/p>\n<p>Wenn Sie allerdings mit der Programmierung einer L&ouml;sung begonnen haben und nicht gleich die Option zum Hinzuf&uuml;gen der Authentifizierung aktiviert haben, stehen Sie erst einmal ohne Authentifizierung da. Und dazu geh&ouml;ren eine ganze Menge Elemente: die Datenbank zum Speichern der Benutzerdaten, die Verweise, einige Dateien mit den Seiten f&uuml;r Login, Registrierung und so weiter und letztlich auch noch die Einbindung der Links zum Einloggen und Registrieren in die Navigationsleiste der Startseite. K&ouml;nnen wir diese Elemente so einfach nachr&uuml;sten und in eine bestehende ASP.NET Core-Anwendung integrieren Oder macht es mehr Sinn, die Anwendung mit Authentifizierung neu zu erstellen und die bestehenden Elemente zu &uuml;bertragen Wenn Sie erst ein paar Seiten erstellt haben, k&ouml;nnen Sie sicher den letzteren Weg einschlagen. Je gr&ouml;&szlig;er die L&ouml;sung allerdings schon gewachsen ist, desto geringer wird der Aufwand f&uuml;r das nachtr&auml;gliche Einbauen der Authentifizierung gegen&uuml;ber der anderen Alternative sein. Also schauen wir uns diesen Ansatz einmal genauer an.<\/p>\n<h2>Beispielprojekt erstellen<\/h2>\n<p>Als Erstes legen wir ein Beispielprojekt an. Dazu nutzen wir den Dialog <b>Neues Projekt<\/b>, wo wir den Eintrag <b>Visual C#|Web|ASP.NET Core-Webanwendung <\/b>ausw&auml;hlen (siehe Bild 1). Au&szlig;erdem wollen wir unsere L&ouml;sung <b>AuthNachruesten <\/b>nennen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_04\/pic_141_002.png\" alt=\"Projekt erstellen\" width=\"574,61\" height=\"359,6794\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Projekt erstellen<\/span><\/b><\/p>\n<p>Im n&auml;chsten Dialog behalten wir die Auswahl der Option <b>Webanwendung <\/b>bei. Hier w&auml;re die M&ouml;glichkeit, &uuml;ber die Schaltfl&auml;che <b>Authentifizierung <\/b>&auml;ndern direkt die Authentifizierung hinzuzuf&uuml;gen. Dies wollen wir aber auslassen, da das Ziel des Artikels ja gerade die manuelle Nachr&uuml;stung der Authentifizierung ist (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_04\/pic_141_003.png\" alt=\"Auswahl ohne Authentifizierung\" width=\"649,559\" height=\"302,7238\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Auswahl ohne Authentifizierung<\/span><\/b><\/p>\n<p>Wenn Sie die Anwendung nun starten, sehen Sie nur die Standardnavigation (siehe Bild 3). Wir h&auml;tten gern, dass oben rechts Navigationseintr&auml;ge angezeigt werden, mit denen sich Benutzer registrieren und einloggen k&ouml;nnen. Dies r&uuml;sten wir nun nach.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_04\/pic_141_004.png\" alt=\"Start der Webanwendung ohne Authentifizierung\" width=\"549,6265\" height=\"262,956\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Start der Webanwendung ohne Authentifizierung<\/span><\/b><\/p>\n<h2>Notwendiges Paket nachinstallieren<\/h2>\n<p>Das Paket, dass die notwendigen Funktionen enth&auml;lt, hei&szlig;t <b>Microsoft.AspNetCore.Identity.EntityFrameworkCore <\/b>&#8211; es handelt sich dabei um ein NuGet-Paket. Diese k&ouml;nnen Sie leicht nachr&uuml;sten &#8211; beispielsweise &uuml;ber den daf&uuml;r vorgesehenen NuGet-Paket-Manager.<\/p>\n<p>Diesen starten Sie &uuml;ber den Kontextmen&uuml;-Eintrag <b>NuGet-Pakete verwalten&#8230;<\/b>. Es erscheint der Dialog aus Bild 4, wo Sie zum Bereich <b>Durchsuchen<\/b> wechseln und dort den Suchbegriff <b>Microsoft.AspNetCore.Identity.Entity-FrameworkCore <\/b>eingeben. Haben Sie den entsprechenden Eintrag gefunden, installieren Sie diesen mit einem Klick auf die Schaltfl&auml;che <b>Installieren<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_04\/pic_141_001.png\" alt=\"Microsoft.AspNetCore.Identity.EntityFrameworkCore nachr&uuml;sten\" width=\"649,559\" height=\"355,8139\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Microsoft.AspNetCore.Identity.EntityFrameworkCore nachr&uuml;sten<\/span><\/b><\/p>\n<p>Microsoft holt dann noch Ihre Zustimmung zur Lizenz ein, die Sie mit einem Klick auf die Schaltfl&auml;che <b>Ich stimme zu <\/b>quittieren. Die entsprechende Meldung zeigt gleich noch an, welche weiteren Bibliotheken mit dieser Bibliothek installiert werden (siehe Bild 5).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_04\/pic_141_005.png\" alt=\"Microsoft.AspNetCore.Identity.EntityFrameworkCore kommt mit ein paar weiteren Bibliotheken\" width=\"424,7115\" height=\"431,5303\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Microsoft.AspNetCore.Identity.EntityFrameworkCore kommt mit ein paar weiteren Bibliotheken<\/span><\/b><\/p>\n<h2>Elemente f&uuml;r CodeFirst-Datenbank hinzuf&uuml;gen<\/h2>\n<p>Wenn wir mit der Authentifizierung arbeiten wollen, wir uns die Bibliotheken zur Verf&uuml;gung stellen, haben wir mehrere M&ouml;glichkeiten, was die Speicherung der damit in Zusammenhang stehenden Daten angeht. Wir wollen es klassisch machen und die Daten in einer SQL Server-Datenbank speichern. Dabei gehen wir nach der Code First-Methode vor und erstellen erst ein paar Elemente im Projekt. Danach erstellen wir auf Basis dieser Objekte die notwendige Datenbank beziehungsweise lassen diese erstellen.<\/p>\n<p>Genaugenommen bauen wir ein Entity Data Model auf, dessen Elemente wir in einem Unterverzeichnis namens <b>Data <\/b>im Projektordner anlegen. Das Verzeichnis <b>Data <\/b>legen Sie an, indem Sie den Kontextmen&uuml;-Eintrag <b>Hinzuf&uuml;gen|Neuer Ordner <\/b>des Projekt-Eintrags im Projektmappen-Explorer aufrufen.<\/p>\n<p>Dem Ordner <b>Data <\/b>f&uuml;gen Sie &uuml;ber den Kontextmen&uuml;-Eintrag <b>Hinzuf&uuml;gen|Klasse <\/b>eine neue Klasse hinzu, die Sie <b>Application-User <\/b>nennen. Diese Klasse f&uuml;llen Sie wie folgt:<\/p>\n<p>Wir f&uuml;gen also den Namespace <b>Microsoft.AspNetCore.Identity <\/b>hinzu und stellen die Klasse <b>Application <\/b>so ein, dass Sie von <b>IdentityUser <\/b>abgeleitet wird.<\/p>\n<p>Auf die gleiche Weise f&uuml;gen Sie eine weitere Klasse namens <b>ApplicationDbContext<\/b> hinzu, welche den Datenbank-Kontext f&uuml;r das Entity Data Model enthalten soll. Diese passen Sie wie folgt an:<\/p>\n<p>Nun nehmen wir ein paar &Auml;nderungen an der Klasse <b>Startup.cs<\/b> vor. Wir ben&ouml;tigen einen Verweis auf den Namespace <b>Microsoft.AspNetCore.Identity<\/b>, einen auf <b>Microsoft.EntityFrameworkCore <\/b>sowie einen auf unseren Namespace mit dem Entity Data Model, also <b>AuthNachruesten.Data<\/b>. Schlie&szlig;lich f&uuml;gen wir vor der Anweisung <b>services.AddMvc()&#8230; <\/b>die Methode <b>services.AddDbContext&#8230; <\/b>sowie die Methode <b>services.AddIdentity&#8230; <\/b>ein:<\/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\/55000141\/\">\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\/55000141?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\/55000141\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"123b777de9\"\/>\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>Im Artikel &#8220;Authentifizierung unter ASP.NET Core&#8221; haben wir gezeigt, wie Sie eine ASP.NET Core-Anwendung erstellen und diese direkt mit Funktionen f&uuml;r die Authentifizierung ausstatten. In anderen Artikeln wiederum haben wir L&ouml;sungen beschrieben, in denen wir zun&auml;chst ohne die Authentifizierung gestartet sind. Nun wollen wir beides zusammenf&uuml;hren. Aber was tun, wenn die L&ouml;sung noch nicht die f&uuml;r die Authentifizierung notwendigen Elemente enth&auml;lt &#8211; nachr&uuml;sten oder neu mit Authentifizierung erstellen und dann die L&ouml;sung &uuml;bertragen Dieser Artikel zeigt den einfacheren Weg.<\/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":[662018,66042018,44000018],"tags":[],"yst_prominent_words":[],"class_list":["post-55000141","post","type-post","status-publish","format-standard","hentry","category-662018","category-66042018","category-ASPNET_Core"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000141","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=55000141"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000141\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000141"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000141"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000141"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000141"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}