【问题标题】:Silverlight Client UserNameSilverlight 客户端用户名
【发布时间】:2011-04-19 15:51:13
【问题描述】:

我正在尝试通过在启动应用程序的 .aspx 页面中使用 HttpContext.Current.User.Identity.Name 将客户端用户名返回到 Silverlight。

我已经将它连接到 InitParams 工作正常,通过 ASP.Net 开发服务器将它传递到 silverlight,但是当我更改为 IIS 网站时,它返回一个空字符串。

我们所有的用户都将位于具有不同域的同一 IP 子网中。这是一个内网应用程序。我需要知道他们是谁,最好不进行身份验证,以便加载正确的界面。我还没有在应用程序中建立任何 Windows 或 Forms 身份验证。

....有可能吗?

【问题讨论】:

    标签: silverlight client


    【解决方案1】:

    如果没有服务器端的身份验证,我相信这是不可能可能的。您必须让 ASP.NET 页面进行身份验证才能将客户端的用户名写入该初始化参数。

    测试网络服务器的进程以本地开发者身份运行,它可能看起来正在运行,因为客户端和服务器都以同一用户身份运行。

    建议:

    在 IIS 中为连接 ASP.Net 页面的应用程序文件夹启用 Windows 身份验证。禁用匿名。这应该(理论上)适用于 Intranet。在这一点上,我认为您应该能够从 HTTP 上下文中获取经过身份验证的用户。我们使用 Thread.CurrentPrincipal.Identity.Name 因为我们在 WCF Web 服务中执行此操作。

    并非所有浏览器都支持 Windows 身份验证。 IE 和 Chrome 似乎效果最好。 Firefox 要求您为每个站点启用此设置(查找“trusted-uris”设置,注意 Negotiate 和 NTLM 是 单独的 设置)。 Safari 和 Opera 以及非 Windows 客户端,我不确定了。

    要获得更一致的跨浏览器支持,请查看 Silverlight 中的“替代”客户端 HTTP。但是,我想这不适用于在 asp 页面中设置 init 参数。如果您可以在加载后向另一个 ASP 页面(或 Web 服务)发出附加请求以获取用户,那么您可以选择使用这个其他 http 堆栈。我发现它支持身份验证本身,无论浏览器如何。

    【讨论】:

    • 谢谢 Aardvark...这就是我所害怕的。对任何解决方案的建议?
    • 启用 Windows 身份验证并要求我登录 DMZ。我的凭据正确返回,但我不想要 DMZ 用户名....我需要用户当前所在的域。关于我对这个问题最简单的解决方案的任何示例/建议。 - 启动 Intranet Silverlight 应用程序 - 获取用户凭据 - 加载他们的界面。用户在他们自己的领域中。 DMZ 中的 Web 服务器。我是不是一直告诉他们他们必须第二次登录?
    • 我认为 SL 客户端无法让本地客户端告诉您本地用户。我认为你是在服务器的摆布来验证调用者。在这一点上,问题实际上是关于 IIS、Windows 和 networkds。快速谷歌引导我here。也许那里的东西可以帮助?
    猜你喜欢
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多