2011-02-28 110 views
0

我正在Intranet环境中编写Silverlight客户端和WCF服务库解决方案。Silverlight和WCF与Windows身份验证

据我所知,如果我设置Windows身份验证,那么调用服务方法将只会成功,如果调用方在Windows中进行身份验证,我不需要编写代码来提供用户凭据。我对此有几个问题。

  1. 我正确吗?

  2. 我被要求让我的申请超时(通常与互联网应用程序完成),使用户再次登录。但是,我已在高级IE选项中启用了“集成Windows身份验证”,并在“安全”部分中启用了“仅在Intranet区域中自动登录”。实际上,现在用户不会登录到我的应用程序,而是登录到IE,Silverlight将这些凭据自动传递给WCF服务。我可以更改为'提示输入用户名和密码',但是只有当IE关闭时,凭证才会丢失,而我无法在超时时间内执行此操作。即使我能够,我也不得不关闭所有参与Intranet区域的IE打开的Windows,因为身份验证似乎在他们之间共享。

  3. 是否可以冒充其他用户?我已经看到代码从Windows应用程序执行此操作,但使用Silverlight时的智能感知似乎没有提供相同的功能?

回答

0

就我所知,您使用IIS Windows身份验证。 WCF服务可以独立配置,并且基于Windows身份也具有安全性,但是它们比传统方法更难一些。

您的问题:

1.To禁用匿名用户并且只允许谁在Windows authentificated的用户,你可以写下面的代码:

<authorization> 
    <deny users="?"/> 
</authorization> 

用户凭证将需要经过和自动通过。你不需要从客户端的应用程序发送它们。 如果匿名认证被IIS禁用,一切都将工作,无需额外的代码。

2.没问题,IE和Chrome不像Firefox,每次用户打开网页时都不需要证书。如果您想要在超时后刷新应用程序的状态,则可以在不请求凭据的情况下执行此操作,例如使用某种MessageBox。

3.身份验证仅适用于服务器端。但是可能在WCF服务中编写必要的代码并从Silverlight客户端调用它。

+0

RE要点1,如果我禁用匿名访问,那么WCF告诉我,即使使用Windows身份验证,我也必须启用匿名访问。 RE第2点,你如何使超时凭证无效?当IE打开时,用户总是登录,所以当时间用完时,你会怎么做? RE点3,我明白你的意思了,我没有想到这一点,谢谢。 – EzaBlade 2011-02-28 21:22:33

+0

@EzaBlade在第二点,我无法想象在超时后更改凭证时必须失效的情况。但是当我用会话开发一个wcf服务时,我使用了一个扩展的代理类,它在由于超时导致的错误之后重新创建了通道。但是可能我已经把wcf与其他类型的超时时间混淆了。第一点很奇怪,因为当我尝试使用WCF数据服务时,IIS只允许仅使用一次认证。 – vorrtex 2011-02-28 23:14:52

+0

我们的渗透测试公司希望应用程序在闲置一段时间后自动注销。由于我无法注销,因为唯一的方法就是关闭IE,我不能通过代码来完成,那么我需要使证书无效,以便进一步的操作会提示他们。作为附注,您不能在Silverlight应用程序中使用WCF会话。 – EzaBlade 2011-04-14 22:37:57