E 'possibile ottenere il nome utente dell'utente attualmente connesso con Silverlight? Si può presumere che l'utente abbia il SO Windows e l'applicazione Silverlight sia ospitata in Internet Explorer. Ottenere l'identità dal lato server con ASP.NET non è un'opzione, questa applicazione Silverlight sarà ospitata su un file HTML statico.Ottieni il nome utente corrente di Windows in Silverlight
risposta
Purtroppo, non penso sia possibile.
Sebbene si dica che possiamo assumere Windows OS/IE, Silverlight stesso non lo presuppone, quindi la maggior parte dei normali meccanismi .NET che sarebbero normalmente disponibili per ottenere il nome utente connesso corrente non esistono all'interno del sottoinsieme del framework disponibile per le app Silverlight:
ie.
System.Net.CredentialCache.DefaultCredentials
System.Security.Principal.WindowsIdentity.GetCurrent().Name
Environment.UserName
sono tutti disponibili all'interno di un'applicazione Silverlight, mentre in (diciamo) un'applicazione Windows Form, ciascuno di questi meccanismi è disponibile per l'uso.
Suppongo che abbia senso, in realtà, poiché non c'è alcuna garanzia che l'applicazione Silverlight sia in esecuzione su una piattaforma Windows/IE.
Per inciso, questa domanda è stato anche chiesto qui:
Current Windows Username and Domain
e quel filo sembra confermare che non c'è modo nativo per raggiungere questo obiettivo. Il thread prosegue suggerendo di "iniettare" il nome utente ASP.NET corrente dalla pagina ASP.NET "hosting" dell'app Silverlight. nell'applicazione Silverlight stessa prima dell'esecuzione nel contesto del computer del client. Naturalmente, anche se funziona, verrà fornito solo il nome utente ASP.NET dai moduli di ASP.NET o dall'autenticazione basata su Windows e non il nome utente di Windows dell'utente attualmente connesso al computer client.
base a questo post la sua non è possibile in JavaScript, quindi penso che il vostro fuori di fortuna: http://bytes.com/topic/javascript/answers/616501-how-get-windows-username-using-javascripts
suona come non c'è nessun vero modo per farlo.
In realtà inizialmente abbiamo optato per una soluzione JavaScript, e ha funzionato. Ma richiede che l'utente accetti un sacco di finestre di sicurezza che sono tutt'altro che ideali. – huseyint
Si può arrivare in questo modo.
1) Creare l'applicazione del servizio Web asp.net.
2) Implementare il servizio Web e il metodo per chiamare dall'applicazione Silverlight.
[WebMethod]
public string GetClientUserName()
{
return System.Web.HttpContext.Current.User.Identity.Name.ToString();
}
3) distribuire questa applicazione di servizio Web sul server web. Non consentire all'utente anonimo di accedere a questo.
4) Aggiungere questo servizio all'applicazione Silverlight. (Aggiungi riferimento servizio)
5) Ora è possibile chiamare questo metodo e ottenere il nome utente dall'intera applicazione Silverlight.
Ho pensato di condividere questo codice che sembra funzionare (YMMV). Si ispira alla risposta di CraigTP e ai suoi collegamenti forniti. So che questo non risponde direttamente alla parte relativa all'esecuzione in una pagina Web statica, ma sembra che l'OP abbia accettato il compromesso APSX.
Nella mia pagina ASPX che ospita Silverlight:
<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>
Nel mio Silverlight codice C#:
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");
}
Mentre sembra che funzioni, non è possibile fare affidamento su questo meccanismo per motivi di sicurezza, come l'autenticazione SSO. – Thorarin
@Thorarin: Funzionerebbe bene per l'autenticazione Windows/Negotiate o NTLM (cosa penso di SSO) o anche di base. Tutto quello di cui stiamo parlando qui riporta il nome utente al client Silverlight. Quello che si fa con queste informazioni in Silverlight è in qualche modo discutibile. Qualsiasi tipo di lavoro di autenticazione/autorizzazione viene in genere eseguito sul server, specialmente quando SL è così in modalità sandbox. Tuttavia, non ho intenzione di dire all'OP di non farlo poiché non conosciamo l'intera storia. Inoltre, l'OP sembra essere alla ricerca di hack creativi. – Aardvark
Il altamente votato risposte a questa domanda non mi ha aiutato.
L'utilizzo di un servizio Web ASP.NET, questo ha funzionato comunque:
string userName =
System.ServiceModel.ServiceSecurityContext.Current.WindowsIdentity.Name;
E questo blog è quello che mi ha impostato sul percorso corretto:
ServiceReferences.ClientConfig ha bisogno di:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding ...>
<security mode="TransportCredentialOnly" />
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
E web.config bisogno s questo:
<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>
Quelli sono gli unici cambiamenti degni di nota avevo bisogno di fare a un'applicazione Silverlight altrimenti di lavoro che ha usato in precedenza l'accesso anonimo per i servizi Web in IIS.
+1 Il 'system.web' è obbligatorio! Grazie per averlo evidenziato ... – Legend
@MichaelMaddox - Il tuo link è stato rotto, sono andato avanti e l'ho aggiornato. –
Environment
.GetFolderPath(Environment.SpecialFolder.Personal)
.Split(new[] { '\\' }, StringSplitOptions.RemoveEmptyEntries)[2];
Errore di runtime: accesso negato. –
// un piccolo miglioramento del codice Maverick risposta utilizzando System.IO.Path.DirectorySeparatorChar piuttosto // // poi
Ambiente .GetFolderPath (Environment.SpecialFolder.Personal) .Split (nuova [] {System.IO.Path.DirectorySeparatorChar}, StringSplitOptions.RemoveEmptyEntries) [2];
bene, ecco come si può ottenere wihtout WCF
http://www.codeproject.com/Articles/47520/Silverlight-Windows-User-Identity-Name
- 1. Ottieni il nome utente Windows dell'utente corrente usando php?
- 2. Ottieni nome utente corrente in C++ su Windows
- 3. Ottieni nome utente corrente in Julia (Linux)
- 4. Ottieni il nome utente di Windows - diversi metodi
- 5. Ottieni il nome dell'utente corrente
- 6. Trova il nome utente dell'utente corrente in Windows in Haskell?
- 7. Ottieni il nome utente in Autenticazione moduli
- 8. Ottieni il nome dell'ambiente corrente
- 9. Autenticazione di Windows: acquisizione del nome utente corrente
- 10. ActiveDirectory Nome utente corrente in ASP.NET
- 11. Ottieni il nome editore dell'applicazione ClickOnce corrente?
- 12. PHP Ottieni il nome della directory corrente
- 13. Ottieni il nome del metodo corrente
- 14. Ottieni il nome della funzione VBA corrente
- 15. Ottieni il nome del metodo corrente
- 16. Ottieni il nome dell'applicazione attiva corrente
- 17. Ottieni il nome del processo corrente (eseguibile) in Vai?
- 18. Trova il nome utente di Windows in R
- 19. Ottenere il nome utente corrente quando rappresentato
- 20. Ottieni nome file corrente in JSP
- 21. SQL Server - nome utente corrente
- 22. come ottenere il nome utente Windows in WPF
- 23. Ottieni nome utente nel costruttore per il controller?
- 24. Ottieni il nome utente di Windows in un componente aggiuntivo legacy (non WebExtensions)
- 25. Ottieni il nome del metodo corrente in esecuzione
- 26. Ottieni il nome della funzione corrente in modalità rigorosa
- 27. Ottieni il nome host della richiesta corrente in node.js Express
- 28. Ottieni il nome del test corrente in Xunit
- 29. Come ottenere il nome utente di Windows in Java?
- 30. Ottieni il nome utente dal plug-in Jenkins Workflow (Pipeline)
Nizza risposta! Probabilmente (e purtroppo) contrassegnerò questa risposta come accettata se non ci sarà alcuna risposta creativa (hack?) – huseyint