Ah jetzt verstehe ich, danke für die Detailinfos. =))
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. (:
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
DANKE für die schnelle Rückmeldung und der Info wie man dies professionell umsetzt. Werde mir die Links gleich mal durchsehen. 😃
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
DANKE für die schnelle Rückmeldung =)
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
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?)
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.
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