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平台上运行.
顺便提一下,这个问题也在这里被问到:
并且该线程似乎证实没有本地方法来实现这一点.然后该线程继续建议从"托管"Silverlight应用程序的ASP.NET页面"注入"当前的ASP.NET用户名.在客户机的上下文中运行之前,进入Silverlight应用程序本身.当然,即使这样可行,它也只会从ASP.NET的表单或基于Windows的身份验证中提供ASP.NET用户名,而不是客户端计算机当前登录用户的Windows用户名.
对这个问题的高度评价的答案对我没有帮助.
但是,使用ASP.NET Web服务可以:
string userName =
System.ServiceModel.ServiceSecurityContext.Current.WindowsIdentity.Name;
Run Code Online (Sandbox Code Playgroud)
这篇博文是让我走上正确道路的博客:
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服务.