在Silverlight中获取当前Windows用户名

hus*_*int 20 windows silverlight ntlm kerberos

是否可以使用Silverlight获取当前登录用户的用户名?您可以假设用户具有Windows操作系统,并且Silverlight应用程序托管在Internet Explorer中.使用ASP.NET从服务器端获取标识不是一个选项,此Silverlight应用程序将托管在静态HTML文件中.

小智 28

你可以通过这种方式获得.

1)创建asp.net Web服务应用程序.

2)实现从Silverlight应用程序调用的Web服务和方法.

[WebMethod]
public string GetClientUserName()
{
    return System.Web.HttpContext.Current.User.Identity.Name.ToString();
}
Run Code Online (Sandbox Code Playgroud)

3)在Web服务器上部署此Web服务应用程序.不允许匿名用户访问它.

4)将此服务添加到Silverlight应用程序.(添加服务参考)

5)现在,您可以调用此方法并从整个Silverlight应用程序中获取用户名.


Cra*_*gTP 27

不幸的是,我不认为这是可能的.

虽然你说我们可以假设Windows OS/IE,但是Silverlight本身肯定不会假设这一点,所以我们通常可以获得当前登录用户名的大多数普通.NET机制都不存在于子集中Silverlight应用程序可用的框架:

即.

System.Net.CredentialCache.DefaultCredentials  
System.Security.Principal.WindowsIdentity.GetCurrent().Name  
Environment.UserName  
Run Code Online (Sandbox Code Playgroud)

在Silverlight应用程序中都不可用,而在(例如)Windows窗体应用程序中,每种机制都可以使用.

我认为这是有道理的,因为无法保证Silverlight应用程序将在Windows/IE平台上运行.

顺便提一下,这个问题也在这里被问到:

当前的Windows用户名和域

并且该线程似乎证实没有本地方法来实现这一点.然后该线程继续建议从"托管"Silverlight应用程序的ASP.NET页面"注入"当前的ASP.NET用户名.在客户机的上下文中运行之前,进入Silverlight应用程序本身.当然,即使这样可行,它也只会从ASP.NET的表单或基于Windows的身份验证中提供ASP.NET用户名,而不是客户端计算机当前登录用户的Windows用户名.


Mic*_*dox 7

对这个问题的高度评价的答案对我没有帮助.

但是,使用ASP.NET Web服务可以:

string userName =
   System.ServiceModel.ServiceSecurityContext.Current.WindowsIdentity.Name;
Run Code Online (Sandbox Code Playgroud)

这篇博文是让我走上正确道路的博客:

http://rouslan.com/2009/03/12/20-steps-to-get-together-windows-authentication-silverlight-and-wcf-service/

ServiceReferences.ClientConfig需要这个:

  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding ...>
          <security mode="TransportCredentialOnly" />
        </binding>
      </basicHttpBinding>
    </bindings>
 </system.serviceModel>
Run Code Online (Sandbox Code Playgroud)

web.config需要这个:

  <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>
Run Code Online (Sandbox Code Playgroud)

这些是我需要对其他工作的Silverlight应用程序进行的唯一值得注意的更改,以前在IIS中使用匿名访问Web服务.