Laden...

Forenbeiträge von Moma2023 Ingesamt 24 Beiträge

26.03.2024 - 15:20 Uhr

Ah jetzt verstehe ich, danke für die Detailinfos. =))

26.03.2024 - 13:19 Uhr

Das Problem ist, wenn ich die Software am Server hochlade, wird durch - using (PrincipalContext principalContext = new PrincipalContext(ContextType.Domain)) - ein Fehler ausgeworfen. (Es wird bereits ein User eines App-Pools verwendet, aber eben keiner vom AD)

=> Der Grund, warum ich an einen SSO User dachte ist, da ja dadurch der Windows User vom AD geladen wird und ich glaube, dass dies dann funktioniert.

Wie sollte es aus Sicht eines IT-Spezialisten wie dir in der Praxis gemacht werden?

Danke für die schnelle Rückmeldung. (:

26.03.2024 - 10:03 Uhr

Liebe Community,

ich erstellte eine Web-Anwendung (ASP.NET Core 6.0) die auch betreut wird (IT Consulting). Aufgrund der unterschiedlichen Sichtbarkeit von Daten, je nach Arbeitsbereich, benötige ich WindowsUser-Daten wie z.B. auch beim Einloggen um dies festhalten zu können (funktioniert lokal beim Testen bereits super, nur am Server wird der Standarduser des AppPools verwendet)

            WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();

            // Überprüfen, ob die Windows-Identität gültig ist
            if (windowsIdentity != null)
            {
                // Abrufen des Benutzernamens aus der Windows-Identität
                string userName = windowsIdentity.Name;

                // Konstruktion des PrincipalContext-Objekts für die Domäne
                using (PrincipalContext principalContext = new PrincipalContext(ContextType.Domain))
                {
                    // Finden des Benutzerprinzipals im Active Directory
                    UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(principalContext, IdentityType.SamAccountName, userName);

                    //Überprüfen, ob das Benutzerprinzipal - Objekt gefunden wurde
                    if (userPrincipal != null)
                    {
                        // Abrufen der E-Mail-Adresse des Benutzers aus dem Benutzerprinzipal                       
                        string userPrincipalName = userPrincipal.UserPrincipalName;

                        //Verwendung der E - Mail - Adresse des Benutzers
                        Login = "JA";
                    }

Aufgrund von Erfahrungen denke ich an einen Single-Sign-On User der meines Wissens nach (Infos vom ehemaligen Server-Admin) extra am IIS Server der Anwendung im APP-POOL erstellt wird und konfiguriert werden muss (Lässt das Zugreifen auf WindowsUser-Daten zu | Der App-Pool verwendet für die Applikation diesen SSO User | etc.)

Gibt es eine kleine Anleitung hierfür wie das Schritt für Schritt gemacht werden muss, auch ob ich ev. noch NuGet-Packeges installieren muss im VS.

Alle Infos die ich hierfür benötige sind wichtig.

Bitte um eure Hilfe, DANKE.

Freundliche Grüße

27.02.2024 - 13:16 Uhr

DANKE für die schnelle Rückmeldung und der Info wie man dies professionell umsetzt. Werde mir die Links gleich mal durchsehen. 😃

27.02.2024 - 07:33 Uhr

Guten Morgen,

ich habe derzeit folgendes umgesetzt. Mit dieser web.config Datei wird automatisch beim Starten dieser Web-Anwendung vom Browser ein kleines Fenster geöffnet, wo man sich zuvor anmelden muss.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <location path="." inheritInChildApplications="false">
        <system.webServer>
            <security>
                <authentication>
                    <anonymousAuthentication enabled="false" />
                    <windowsAuthentication enabled="true" />
                </authentication>
            </security>
        </system.webServer>
    </location>
</configuration>

Aufgrund einer entwickelten Login Seite will ich jetzt dieses Fenster nicht vor dieser Login Seite aufrufen, sondern mit dem Anmeldefenster "verknüpfen", Sodass durch [Authorized] vor jeder Klasse diese Anmeldung erforderlich ist um Daten sehen zu können. Dafür erstellte ich (Index.cshtml):

            <ul class="navbar-nav">
                @if (User.Identity?.IsAuthenticated == true && !(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Development"))
                {
                    <li class="nav-item">
                        <span class="navbar-text text-dark">Hello @User.Identity?.Name!</span>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a>
                    </li>
                }
                else
                {
                    @Html.Partial("_LoginPartial")
                }
            </ul> 

und _LoginPartial (PartialView für das Formular):

@using System.Security.Principal
@model IndexModel
@using (Html.BeginForm("SignIn", "Index", FormMethod.Post, new { @class = "form-horizontal" }))
{
   <ul class="navbar-nav">
       @if (User.Identity?.IsAuthenticated == true && !(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Development"))
       {
           <li class="nav-item">
               <span class="navbar-text text-dark">Hello @User.Identity?.Name!</span>
           </li>
           <li class="nav-item">
               <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a>
           </li>
       }
       else
       {
           <li class="nav-item">
               <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignIn">Sign in</a>
           </li>
       }
       <li class="navbar-nav">
           <input asp-for="UserName" class="nav-link text-dark" placeholder="Username" style="width:60%" />
           <br />
           <input asp-for="Password" type="password" class="nav-link text-dark" asp-area="MicrosoftIdentity" placeholder="Password" style="width:60%" />
           <br />
           <button type="submit" class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Index" asp-action="SignIn">Anmelden</button>
       </li>
   </ul>
}

Dadurch sollte anschließend die Erstellte Action im IndexController (Index:Controller) aufgerufen werden.

    public class Index : Controller
   {
       private readonly SignInManager<IdentityUser> _signInManager;
       
       public Index(SignInManager<IdentityUser> signInManager)
       {
           _signInManager = signInManager;
       }
       [HttpPost]
       public async Task<IActionResult> SignIn(IndexModel model, string returnUrl = null)
       {
           if (ModelState.IsValid)
           {
               var result = await _signInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, lockoutOnFailure: false);
               if (result.Succeeded)
               {
                   if (!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl))
                   {
                       return Redirect(returnUrl);
                   }
                   else
                   {
                       return RedirectToAction("Index", "Home"); // Redirect to the home page or any other authorized page
                   }
               }
               else
               {
                   ModelState.AddModelError(string.Empty, "Invalid login attempt.");
                   return View(model);
               }
           }
           return View(model);
       }

All das habe ich bereits recherchiert, aber aufgrund von für mich unbekannten Fehlern wird bei mir nicht nach Anklicken des Anmelde-Buttons diese Action nicht aufgerufen.

Entschuldige falls es solch einen Artikel schon gibt, aber ich fand leider keinen. Eine Schritt für Schritt Anleitung hierfür wäre super aber ich konnte leider nichts passendes finden. Wäre für jegliche Hilfe sehr dankbar.

Liebe Grüße

20.01.2024 - 13:19 Uhr

DANKE für die schnelle Rückmeldung =)

20.01.2024 - 11:23 Uhr

Guten Tag,

baute bereits eine gut passende Web-Applikation mit Datenbankzugriff auf einen SQL Server. Nun denke ich natürlich aufgrund von Datensicherheit und Datenschutz an das Einbinden von Active Directory. Zu Beginn stellte ich beim Projekt (zum Testen) ein: "No Authentication", was bedeutet dass ich dies vermutlich auch noch verändern muss.

Suchte bereits nach passenden Anleitungen zur Struktur etc. wurde jedoch nicht fündig. Benötige eine Schritt für Schritt Anleitung für das Einbauen von Active Directory inkl. AD-Gruppen für dementsprechende Berechtigungen.

Würde mich über passende Links freuen.

LG

24.10.2023 - 06:52 Uhr

Habe einer Anleitung gefolgt um eine ID für eine Detailansicht zu übergeben. Dies startet indem ich in Controller1 einn Link dadurch erstelle:

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Routing;
public class MyController : Controller
{
   private readonly LinkGenerator _linkGenerator;
   public MyController(LinkGenerator linkGenerator)
   {
       _linkGenerator = linkGenerator;
   }
   public IActionResult Details(int id)
   {
       // Generieren Sie den Link zur nächsten Seite und übergeben Sie die ID als Parameter.
       var nextPageLink = _linkGenerator.GetPathByAction("NextPageAction", "NextPageController", new { id = id });
       return Redirect(nextPageLink);
   }
}

Im HTML Code gebe ich folgendes ein: (statt 123 natürlich die dementsprechende ID von der Datenbank)

<a asp-controller="MyController" asp-action="Details" asp-route-id="123">Details anzeigen</a>

Und lenke damit in den neuen Controller wo ich die ID übernehmen kann (laut Anleitung)

public class NextPageController : Controller
{
   public IActionResult NextPageAction(int id)
   {
       // Verwenden Sie die empfangene ID hier auf der nächsten Seite.
       return View();
   }
}

Meine Frage dazu ist, was mach ich falsch, warum dies bei mir nicht auf die neue Seite lenkt. Machte es genauso und eine weitere Frage dazu wäre: Wenn ich hier die ID erhalte ist es gut und schön, jedoch wenn ich dann die Seite aufrufe verliere ich ja die Daten wieder? ⇒ wie kann ich diese dann beibehalten? (ev. Property mit readonly?)

21.10.2023 - 12:07 Uhr

Guten Tag,

da mir Datensicherheit sehr wichtig ist, dachte ich auch an folgendes ⇒ Das Passwort steht im Sourcecode und das kam mir eben sehr komisch vor. Was wäre aus deiner Sicht die korrekte Lösung dafür, dies professionell zu lösen?

Wäre froh dies SICHER lösen zu können.

18.10.2023 - 08:07 Uhr

Guten Tag.

Habe mich mittlerweile reingelesen, nur wäre für mich ein Anwendungsbeispiel sehr wichtig wo ich mit Hilfe solch eines Links die Seite wechseln kann. Eine Liste wo man mit Hile eines Links zu einem Element nähere Details sehen kann.

Danke.

Freundliche Grüße

18.10.2023 - 07:53 Uhr

Der korrekte ConnectionString der funktioniert sieht folgendermaßen aus:

Server=***;Initial Catalog=***;uid=***;password=***;Integrated Security=False;Trusted_Connection=False;Encrypt=False

=D

17.10.2023 - 10:44 Uhr

Probiere gerade das in der Konsole im VS auszuführen

Scaffold-DbContext "Server=servername;Database=dbname;User Id=ag;Password=***;Trusted_Connection=False;Encrypt=False" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

und es kommt folgende Fehlermeldung:

Build started...
Build succeeded.
...

Error Number:18456,State:1,Class:14
Fehler bei der Anmeldung für den Benutzer "ag".

LG

17.10.2023 - 06:53 Uhr

ev. Anmeldefehler komme gerade auf ein paar Sachen drauf.

16.10.2023 - 15:17 Uhr

Ich fands, deine Veränderung und meines dazu löst das Problem =) DANKE

16.10.2023 - 15:10 Uhr

Oki, trotzdem danke ich glaube das ist mit Encrypt=False im connectionstring gelöst, da ich jetzt zu dem Problem kam, dass, obohl im connectionstring unter uid:Name ein anderer Benutzername steht, beim ausführen mein Windows user verwendet wird.

Bin schon am Suchen =)

Ja hast recht, werd ich machen =)

16.10.2023 - 14:50 Uhr

Das war korrekt. Dank für die immer zeitnahe Hilfe. Jetzt erhielt ich gerade folgendes Problem.

Fehlermeldung:

Microsoft.Data.SqlClient.SqlException: "A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - Die Zertifikatkette wurde von einer nicht vertrauenswürdigen Zertifizierungsstelle ausgestellt.)"

Also meine Vermutung ist, dass das Passwort nicht korrekt ist oder Berechtigungen fehlen, weil ich mich gsd schon verbinden konnte =)

16.10.2023 - 11:36 Uhr

@Alf Ator danke werde ich mir auf jeden Fall durchlesen

Ich probierte jetzt vieles und auch die Fehlermeldung änderte sich. Hole mir den ConnectionString auch aus dem Appsettings.json file. Aber dachte eben da ich vermute dass der Fehler trotzdem vermutlich für mich schwer zu finden ist und für euch etwas lustig sein wird^^, stelle ich den Sourcecode einfach mal rein. Vlt stimmt auch was beim Aufbau nicht oder so.

Im appsettings.json machte ich eben die Connectionstrings so:

"Server=***;Database=***;uid=***;password=***;TrustedConnection=True"

Aktuelle Fehlermeldung: System.ArgumentException: "Keyword not supported: 'trustedconnection'."

16.10.2023 - 10:02 Uhr
  1. Danke für die super erklärung und neuen Link =)

2. Naja ich erstelle ja eine neue Klasse : DbContext wo dann anschließend

  • OnConfiguring
  • und alle Datenbank-Tabelln enthalten sind

Da ich dies im IndexModel hinzufügte und ja jede View ein eigenes Model hat, müsste ich dies ja dann in jedem Model extra schreiben, sollte ich auf dieser Ansicht Daten von der DB benötigen. weil man ja auf einer anderen Ansicht schwer dieses Model verwenden kann, seidenn ich füge auf jeder Ansicht zusätzlich @model IndexModel hinzu. ⇒ Nur professionell denke ich wäre es eben dafür eine extra Controller zu erstellen (sry ich meinte Controller, nicht ein Model welches hinter keiner View steht) und dann kann ich diesen Controller in jedem Model verwenden wenn ich Daten benötige)

16.10.2023 - 08:53 Uhr

Recherchiere schon ne zeit aber komme nicht drauf, wo genau das Problem liegt. Vlt kann mir wer von euch wer weiterhelfen, habe es genauso gemacht wie beschrieben in Link Nr. 2 von T-Virus nur frage ich mich eines: Eigentlich müsste ich ja irgendwo den Benutzername und das Passwort eingeben und nicht nur den UseSqlServer-Link?

Eine weitere Frage von mir wäre, machte dies in dem Model einer View (Index Model in einer eigenen Klasse). Natürlich gehe ich davon aus, dass man dies natürlich in einem eigenen Model macht auf welches man immer zugreifen kann? Sonst wäre das ja in jedem Model wo ich daten benötige enthalten.

Wäre super wenn ich das heute hinbekommen würde =)

LG

14.10.2023 - 13:09 Uhr

Ich werde mir das alles mal ansehen um die Neuen Sachen zu verstehen. Was ich bis jetzt sah wurde vieles besser, kompakter etc.

Sollten noch fragen im Detail bei Problemen entstehen, werde ich mich diesbezüglich spätestens kommenden Montag melden.

Wünsche noch ein schönes Wochenende =)

14.10.2023 - 12:40 Uhr

Ich erwartete nicht den Quellcode sondern eben genau solche Anleitungen wo das eben durchgegangen wird.

DANKE T-Virus =)

14.10.2023 - 12:02 Uhr

Verwendetes Datenbanksystem: SQL Server - Datenbanken (Test- und Produktivsystem) ⇒ auch das Datenmodell ist bereits von mir erstellt worden (3rd Normalform)

Ich entwickelte vor Jahren eine MVC Anwendung mit bereits veraltetem Datenbankzugriff. Jetzt würde ich bitte alle Informationen benötigen wie ich Schritt für Schritt vorgehen muss damit dies ordnungsgemäß gemacht wird. ⇒ derzeit Views mit dementsprechenden Models vorhanden.

Mit Hilfe von manuellen Eingaben durch User ⇒ Textfelder werden durch das Anklicken eines Buttons in der Datenbank gespeichert.

Diese Daten (alle die eingegeben wurden) sollen anschließend auf einer View ersichtlich sein.

Danke für eure Hilfestellung und hoffe ich habe alles verständlich erklärt. Bei Fragen stehe ich gerne zur Verfügung.

Liebe Grüße

11.10.2023 - 14:17 Uhr

Danke für die Hilfestellung, werde zukünftig besser darauf achten und besser/verständlicher Beschreiben.

Liebe Grüße

10.10.2023 - 07:32 Uhr

Guten Tag.

Bin beim Entwickeln einer Web Applikation (ASP.NET Core Web App) nach viele Jahre Erfahrung mit einer bereits veralteten MVC Anwendung. Kam mittlerweile zu folgenden Problemen aufgrund von Veränderungen:

1 - @Html.ActionLink("Österreich", "Country", "Index", new {id = "austria"})

Ein ActionLink auf einer Website (HTML) soll dazu führen einen Parameter "Österreich" mitzugeben. Zusätzlich erstellte ich in der Applikation einen Ordner "Controllers" in dem ich einen IndexController.cs erstellte. In diesem Controller befinden sich ActionResults (Create, Edit ...) und ein ActionResult von mir:

        [HttpPost]
       [ValidateAntiForgeryToken]
       public ActionResult Country(string id)
       {
           return RedirectToAction("ActionName", "ControllerName", id);
       }

Testete via Breakpoint häufig und kam leider nie in diese Methode. Was mache ich falsch?

2 - Im _Layout erstellte ich ein kleines Menü mit einer Auswahlliste:

                <div class="topnav" id="myTopnav">
                   <a href="/Index" class="active">Übersicht</a>
                   <a href="/Privacy">Eingabe</a>
                   <div class="dropdown">
                       <button class="dropbtn">
                           Dropdown
                           <i class="fa fa-caret-down"></i>
                       </button>
                       <div class="dropdown-content">
                           <a href="#">Link 1</a>
                           <a href="#">Link 2</a>
                           <a href="#">Link 3</a>
                       </div>
                   </div>
                   <a href="#about">Impressum</a>
                   <a href="javascript:void(0);" class="icon" onclick="myFunction()">☰</a> 
               </div>

inkl. einer css Datei. Leider öffnet sich die enthaltene DropDown liste nur dann, wenn ich den Browser so weit minimiere, bis sich die Felder untereinander befinden.

Wäre sehr dankbar für eine Hilfestellung.

Freundliche Grüße