| 

.NET C# Java Javascript Exception

7
Wir betreiben in unserer Firma mehrere Webserver für das Intranet: Einen für die normale Anwendung und den Zugriff auf HTML-Seiten, einen für eigene Intranet-Applikationen und einen DB-Server. Nun möchte ich, dass sich ein Mitarbeiter einmal auf dem, nennen wir ihn HTML-Server, anmeldet, auch Zugriff auf die anderen Syteme erhält (etwa wenn er per Link eine Applikation startet). Geht sowas und wenn ja, wie?
News:
26.01.2012
Bianca B. 41 3
3 Antworten
3
Hallo,
Ich habe soetwas neulich erst implementiert, allerdings mit SL.
Ich gehe davon aus, dass der Webserver in einer Domaene mit dem DB-Server steht. Dann musst du im IIS statt NTLM den Kerberos Provider aktivieren.

Im Code der Website setzt Du impersonation auf true und beim Zugriff auf die Datenbank delegierst du die Authentifizierung. Natürlich muss in der AD Delegation vom Webserver zum DB-Server aktiviert werden.

Wenn ich im Büro bin, gebe ich dir ein paar Codeschnipsel.

//edit
unsere Infrastruktur sah in etwa so aus: Webserver (SL) --impersonation--> Webserver (WCF) --delegation--> DB-Server (MS-SQL)
Wenn man nicht auf SL setzt, kann man das ImpersonationLevel des ServiceProxy setzen:
client.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation;


Auf dem Server, auf dem du impersonifizierst und delegierst machst du folgendes:
[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public List<Stuff> GetStuffBy(int Id)
{
var result = new List<Stuff>();

if ((ServiceSecurityContext.Current.WindowsIdentity.ImpersonationLevel ==
TokenImpersonationLevel.Impersonation) ||
(ServiceSecurityContext.Current.WindowsIdentity.ImpersonationLevel == TokenImpersonationLevel.Delegation))
{
using (ServiceSecurityContext.Current.WindowsIdentity.Impersonate())
{
result = DataAccessFacade.GetStuffBy(Id);
}
}

return result;
}


Der Zugriff auf die DB im DAL geschieht schon im Kontext des aufrufenden Benutzers.
Die Delegation muss in der ActiveDirectory Computers & Users für den entsprechenden aufrufenden Server eingestellt werden. (Computers & Users - Server - Properties - Delegation). Service Type wäre mssqlsvc, Port wahrscheinlich 1433. Rest in Abhängigkeit von euren Servereinstellungen.
26.01.2012
mplogas 170 5
2
Ja das geht :-)
Eine Möglichkeit hat mplogas skizziert, eine andere wäre, die
Windows Identity Foundation zu benutzen. Ich habe keine fertige Anleitung dazu parat, aber das Prinzip wäre, dass alle beteiligten Anwendungen ihre Zugangskontrolle an ein eigenes System delegieren, statt jeweils selbst den Benutzer zu authentifizieren. Dieses System kann auch mit WIF der AD-Server sein, muss es aber nicht. WIF hilft Dir dabei, die (delegierte) Authentifizierung in Deine Systeme einzubauen und nutzt dabei Standards wie SAML. Das erleichtert es, später auch noch weitere Anwendungen, auch zugekaufte Produkte (so sie sich auf den Standard stützen), mit einzubinden.

Der Verweis auf den DB-Server in Deiner Frage ist mir nicht völlig klar. Zur Sicherheit: "Normale" Benutzer sollten nicht direkt mit dem DB-Server interagieren. Das sollte den Anwendungen vorbehalten bleiben, weshalb auch diese dafür zuständig sind, die Benutzer vorher zu authentifizieren und ggf. zu autorisieren.
26.01.2012
Matthias Hlawatsch 13,2k 4 9
1
Hallo,

Wenn Ihr eine ADS Domäne habt ist das - vielleicht - gar kein Problem. Viele Systeme unterstützen die Windows Authentifizierung, so auch Asp.Net Seiten und der MS SQL Server. Einfach in der web.config folgenden Eintrag hinterlegen:

<authentication mode="Windows" />

Mit folgender Zeile erreichst Du dann, dass nur authentifizierte Benutzer mit der Seite arbeiten können.

<authorization>
<allow users="*" />
</authorization>

Die Windowsanmeldung ist beim SQL Server Standard, da musst Du nur noch die notwenidigen Rechte vergeben.

Wenn an den Maschinen eine eigenständige Anmeldung nötig sein soll bekommt man das mit Asp.Net auch recht einfach hin. Schau Dir dazu mal den Membership Provider bzw. das Framework an. Da ist an solche Dinge ebenfalls gedacht worden. Du musst nur in den web.config Dateien den gleichen MaschineKey hinterlegen.

Das funktioniert dann aber nur auf Asp.Net basis und lässt sich nicht an andere Systeme deligieren. Zu dem Thema gibt es auch ein ganz neues Framework von Microsoft -> Windows Identity Foundation, das auf Claims Bases Authentication basiert. Das Thema ist aber sehr komplex und hier nicht eben in zwei Sätzen erklärt. Das ist aber dazu gedacht verschiedenste Systeme unter einen Hut zu bekommen.

Gruß
26.01.2012
LutzJ 1,3k 1 8

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH