Ist es möglich, den Benutzernamen des derzeit angemeldeten Benutzers bei Silverlight abzurufen? Sie können davon ausgehen, dass der Benutzer über ein Windows-Betriebssystem verfügt und die Silverlight-Anwendung in Internet Explorer gehostet wird. Es ist keine Option, die Identität von der Serverseite mit ASP.NET abzurufen. Diese Silverlight-Anwendung wird in einer statischen HTML-Datei gehostet.Abrufen des aktuellen Windows-Benutzernamens in Silverlight
Antwort
Leider glaube ich nicht, dass es möglich ist.
Obwohl Sie sagen, dass wir Windows OS/IE annehmen können, nimmt Silverlight selbst dies natürlich nicht an, also tun die meisten der normalen .NET-Mechanismen, die uns normalerweise zur Verfügung stehen würden, den aktuell angemeldeten Benutzernamen nicht in der Teilmenge des für Silverlight-Apps verfügbaren Frameworks vorhanden:
dh.
System.Net.CredentialCache.DefaultCredentials
System.Security.Principal.WindowsIdentity.GetCurrent().Name
Environment.UserName
sind alle nicht zur Verfügung innerhalb einer Silverlight-Anwendung, während in (sagen wir) eine Windows Forms-Anwendung, wobei jeder dieser Mechanismen zu nutzen, zur Verfügung steht.
Ich denke, es macht Sinn, wirklich, da es keine Garantie gibt, dass die Silverlight-Anwendung auf einer Windows/IE-Plattform ausgeführt wird.
Übrigens wurde diese Frage auch hier gefragt über:
Current Windows Username and Domain
und dieser Thread scheint zu bestätigen, dass es keine native Möglichkeit, dies zu erreichen. Der Thread schlägt dann vor, den aktuellen ASP.NET-Benutzernamen von der ASP.NET-Seite "einzubinden", die die Silverlight-App "hostet". in die Silverlight-Anwendung selbst, bevor sie im Kontext des Client-Computers ausgeführt wird. Selbst wenn dies funktioniert, erhalten Sie nur den ASP.NET-Benutzernamen aus der Forms oder Windows-basierten Authentifizierung von ASP.NET und den Windows-Benutzernamen des derzeit angemeldeten Benutzers des Client-Computers.
nach Dieser Beitrag ist es nicht möglich, in JavaScript, so dass ich denke, dass Ihr kein Glück: http://bytes.com/topic/javascript/answers/616501-how-get-windows-username-using-javascripts
klingt wie es keine wirkliche Möglichkeit, es zu tun ist.
Eigentlich haben wir uns zunächst für eine JavaScript-Lösung entschieden, und es hat funktioniert. Aber es erfordert, dass der Benutzer eine Reihe von Sicherheitsdialogen akzeptiert, die alles andere als ideal sind. – huseyint
Sie können es schaffen, auf diese Weise zu bekommen.
1) Erstellen Sie ASP.net Web-Service-Anwendung.
2) Implementieren Sie den Webservice und die Methode zum Aufrufen von Silverlight-Anwendungen.
[WebMethod]
public string GetClientUserName()
{
return System.Web.HttpContext.Current.User.Identity.Name.ToString();
}
3) Stellen Sie diese Web-Service-Anwendung auf dem Webserver bereit. Lassen Sie keinen anonymen Benutzer darauf zugreifen.
4) Fügen Sie diesen Dienst der Silverlight-Anwendung hinzu. (Service-Referenz hinzufügen)
5) Jetzt können Sie diese Methode aufrufen und Benutzernamen aus der gesamten Silverlight-Anwendung abrufen.
Ich dachte, ich würde diesen Code teilen, der zu funktionieren scheint (YMMV). Es ist inspiriert von CraigTPs Antwort und seinen Links, die er zur Verfügung gestellt hat. Ich weiß, dass dies nicht direkt den Teil über das Laufen auf einer statischen Webseite beantwortet, aber es scheint, dass das OP den APSX-Kompromiss akzeptiert hat.
In meiner ASPX-Seite, die Silverlight-Gastgeber:
<head>
<!-- ...snip... -->
<script runat="server" language="c#">
void Page_Load()
{
this.UsernameField.Value = User.Identity.Name;
}
</script>
</head>
<body>
<input type="hidden" ID="UsernameField" runat="server" />
<!-- ...snip... -->
</body>
In meinem Silverlight-C# -Code:
private string GetCurrentUserName()
{
HtmlDocument doc = HtmlPage.Document;
if (doc == null)
{
return string.Empty;
}
HtmlElement elm = doc.GetElementById("UsernameField");
if (elm == null)
{
return string.Empty;
}
return elm.GetAttribute("value");
}
Während dies so aussieht, wird es funktionieren, Sie können sich nicht auf diesen Mechanismus für die Sicherheit verlassen, wie SSO-Authentifizierung. – Thorarin
@Thorarin: Dies würde für Windows/Negotiate oder NTLM (was ich denke für SSO) Authentifizierung oder sogar Basic gut funktionieren. Alles, worüber wir hier reden, ist, den Benutzernamen zurück zum Silverlight-Client zu bekommen. Was man mit dieser Information in Silverlight macht, ist etwas zweifelhaft. Jede Art von Authentifizierungs-/Autorisierungsarbeit wird typischerweise auf dem Server ausgeführt - insbesondere wenn SL so sandboxed ist. Aber ich werde dem OP nicht sagen, dass er das nicht tun soll, da wir die ganze Geschichte nicht kennen. Außerdem scheint das OP nach kreativen Hacks Ausschau zu halten. – Aardvark
Die hoch Antworten stimmten auf diese Frage nicht mir geholfen hat.
eine ASP.NET Web-Service, arbeitete dies jedoch:
string userName =
System.ServiceModel.ServiceSecurityContext.Current.WindowsIdentity.Name;
Und dieser Blog-Eintrag ist derjenige, der mich auf dem richtigen Weg gesetzt:
ServiceReferences.ClientConfig benötigt dies:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding ...>
<security mode="TransportCredentialOnly" />
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
Und web.config brauchen s dies:
<system.web>
<authentication mode="Windows" />
<identity impersonate="false" />
</system.web>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding ...>
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
Diejenigen, die einzigen nennenswerten Veränderungen sind ich zu einer ansonsten arbeitet Silverlight-Anwendung zu machen, erforderlich, die zuvor die anonymen Zugriff für Web-Dienste in IIS verwendet.
+1 Das 'system.web' ist obligatorisch! Danke für die Hervorhebung ... – Legend
@MichaelMaddox - Ihr Link war kaputt, ich ging voran und aktualisierte es. –
Environment
.GetFolderPath(Environment.SpecialFolder.Personal)
.Split(new[] { '\\' }, StringSplitOptions.RemoveEmptyEntries)[2];
Laufzeitfehler: Zugriff verweigert. –
// eine kleine Verbesserung der Codes Maverick Antwort mit System.IO.Path.DirectorySeparatorChar eher // dann //
Umwelt .GetFolderPath (Environment.SpecialFolder.Personal) .split (neu [] {System.IO.Path.DirectorySeparatorChar}, StringSplitOptions.RemoveEmptyEntries) [2];
gut, hier ist, wie Sie es wihtout wcf
http://www.codeproject.com/Articles/47520/Silverlight-Windows-User-Identity-Name
- 1. Abrufen des aktuellen Modulnamens
- 2. Abrufen des aktuellen Verzeichnisses in Objective C
- 3. Abrufen des aktuellen Datums in SQL Server?
- 4. C# und IME - Abrufen des aktuellen Eingabetextes
- 5. Abrufen des aktuellen Metrikwerts aus Graphit
- 6. Web-Setup-Projekt - Abrufen des aktuellen Computernamens
- 7. AngularJS Abrufen des aktuellen Fabrik-/Servicenamens
- 8. Thread-ID des aktuellen Methodenaufrufs abrufen
- 9. Programmgesteuertes Abrufen des aktuellen Akkuladestands mit COCOA
- 10. Abrufen des aktuellen Datums für den Zufallszahlengenerator
- 11. Aktuellen Sitzungswert in JavaScript abrufen?
- 12. Abrufen des gewählten Datums zu JDBC anstelle des aktuellen Datums
- 13. Abrufen von Antwortheadern in Silverlight?
- 14. Aktuellen Methodennamen abrufen
- 15. Abrufen des aktuellen Zeilenindex von WPF DataGrid in XAML
- 16. Abrufen des aktuellen Standorts mit CLLocationManager in Swift
- 17. Abrufen des Namens der aktuellen Methode in C++
- 18. Aktuellen Titel des aktiven Fensters in Java abrufen
- 19. Abrufen der aktuellen Bildnummer
- 20. Aktuellen Umgebungsnamen abrufen
- 21. Aktuellen Exchange Server abrufen
- 22. Abrufen des Pfads der aktuellen Quelldatei mit Fisch
- 23. Den aktuellen Standort des Benutzers abrufen Google API funktioniert nicht
- 24. Unklare Anleitung zum Abrufen des aktuellen Standorts für Android
- 25. Abrufen des aktuellen Standorts jetzt, nicht beim Aktualisieren
- 26. Programmgesteuertes Abrufen des aktuellen Visual Studio IDE-Lösungsverzeichnisses aus Addins
- 27. Das Abrufen des aktuellen Kalendertages führt zu falschen Ergebnissen
- 28. Abrufen von Datensätzen nach der aktuellen Zeitzone des Benutzers
- 29. Wie kann ich die SID des aktuellen Windows-Kontos abrufen?
- 30. Windows-Benutzernamen des aktuellen Benutzers mit PHP abrufen?
Nizza Antwort zu bekommen! Ich werde wahrscheinlich (und leider) diese Antwort als akzeptiert markieren, wenn es keine kreative Antwort geben wird (hack?) – huseyint