我正在Intranet环境中编写Silverlight客户端和WCF服务库解决方案。
据我了解,如果我设置了Windows身份验证,那么只有在Windows中对调用者进行身份验证并且我不需要编写代码来提供用户凭据时,对服务方法的调用才会成功。我有几个问题。
我说错了吗?
我被要求让我的应用程序超时(通常使用Internet应用程序),使用户再次登录。但是,我在高级IE选项中启用了“集成Windows身份验证”,在“安全”部分中启用了“仅在Intranet区域中自动登录”。实际上,现在用户不登录我的应用程序,而是IE和Silverlight会自动将这些凭据传递给WCF服务。我可以更改为“提示输入用户名和密码”,但只有当IE关闭时才会丢失凭据,这是我在超时时无法执行的。即使我可以,我也必须关闭所有参与Intranet区域的IE打开的Windows,因为身份验证似乎在他们之间共享。
是否可以冒充其他用户?我已经看到了从Windows应用程序执行此操作的代码,但使用Silverlight时的intellisense似乎没有提供相同的功能?
答案 0 :(得分:0)
据我所知,您使用IIS Windows身份验证。 WCF服务可以独立配置,它们也具有基于Windows身份的安全性,但它们比传统方法更难。
您的问题:
1.要禁用匿名用户并仅允许在Windows中进行身份验证的用户,您可以编写以下代码:
<authorization>
<deny users="?"/>
</authorization>
之后,将需要用户凭据并自动传递。而且您不需要从客户端的应用程序发送它们。 如果IIS禁用匿名身份验证,则无需额外代码即可完成所有操作。
2.没关系,IE和Chrome与Firefox不同,每次用户打开网页时都不需要凭据。如果要在超时后刷新应用程序的状态,则可以在不请求凭据的情况下执行此操作,例如使用某种类型的MessageBox。
3.Impersonation仅适用于服务器端。但它可能是在WCF服务中编写必要的代码并从Silverlight客户端调用它。