我有一个包含几个独立组件的项目,所有这些组件都需要相互交谈。我现在正试图找到一种在每个组件之间共享权限系统的好方法。
这三个主要组成部分是:
服务器(1,3)都可以访问同一个数据库。每个组件之间的通信由WCF web服务执行。
我需要确保从Windows Service(3)请求信息的人是拥有正确访问权限的用户。Silverlight应用程序(2)是请求应该来自的地方。目前,Windows (1)没有可用的用户信息,因为它完全独立于Asp.Net应用程序(3)。我不想存储和传递用户名和密码,用户只需输入一次他们的凭据,在登录ASP.Net App(1)时就会出现这种情况。
获得Windows服务用户身份的好方法是什么(3)?
(我将在下面发布一个可能的答案。)
发布于 2009-06-09 16:05:19
如果由我决定,我会使用来自ASP登录的身份验证信息(用户)来传递。此对象将自动传递给所有ASP.NET网页,因此随时可以随时调用Windows,并且您应该能够轻松地验证权限。
发布于 2009-06-09 19:01:17
您可以保护Silverlight和ASP.NET之间的调用,使用ASP.NET应用程序服务向Silverlight公开ASP.NET身份验证机制。然后,Silverlight应用程序将维护对ASP.NET的后续调用的会话信息。在过去,我在ASP.NET应用程序中创建了WCF服务,并使用PrincipalPermission属性(http://msdn.microsoft.com/en-us/library/ms731200.aspx)来使用Silverlight中提供的登录信息来保护WCF服务方法。此场景工作完美,不需要您创建自己的安全机制,例如传递会话ID或指示用户名的字符串(不推荐)。我认为这个设置也适用于多个服务器之间,但我不确定在Windows服务中托管WCF服务会如何影响安全性。可能有一种方法可以在两者之间启用某种形式的模拟。一定要查看ASP.NET应用程序服务来保护#1和#2,如果您能够在IIS中托管您的WCF,那么它将满足您的所有需求,而您的终端所需的工作非常少。
发布于 2009-06-09 16:01:53
我看到的一种可能性是从ASP.Net应用程序传递会话ID以进行用户标识。
当Silverlight应用程序(2)从Asp.Net(1)获得服务时,它可以被传递会话ID,然后,当Silverlight应用程序(2)向Windows (3)发出请求时,它可以作为参数传递会话ID。Windows (3)可以使用Asp.Net应用程序(1)公开的WCF服务来查询给定会话ID的用户标识。
这里有潜在的安全漏洞吗?在我看来,如果有人能劫持sessionID,不管它是否被传递给Silverlight应用程序,它都会被曝光和劫持。
https://stackoverflow.com/questions/970927
复制相似问题