ASP.NET从外部网站“登录”

时间:2009-08-10 14:03:06

标签: asp.net authentication authorization

看着却找不到答案。不确定Title应该是什么。希望从“开箱即用”的一些建议。我不认为我是唯一面对这一点的人。

“ASP.NET应用程序如何才能”接受“已在网站中执行用户授权”?

我们有自己的ASP.NET(2.0)应用程序。它支持FBA或Windows身份验证,并且它具有自己的“用户名+密码”表,用于“非Windows”登录。现在我们被客户要求 - 他们通常允许自己的用户通过内部网+ Windows登录 - 如何将我们的应用程序“嵌入”他们自己的网站,并允许他们自己的外部互联网客户访问它。 / p>

要求是(外部)客户将使用某些用户名+密码身份验证登录其“成员站点区域”。然后,他们希望“透明地”访问我们的页面 - 最重要的是,最终用户不必重新提供任何用户名+密码,我们必须有一些方法只是“接受”传入的用户名。我们无法知道网站可能以自己的身份验证方式拥有什么;他们自己的网站可能是用ASP编写的,他们很可能想要做出很少的改变。

那么,我该怎么做呢?我意识到没有什么能够健壮;客户不会期望,但会期望一些最低限度。例如,如果我只是告诉他们“将我的应用程序的URL嵌入到您的应用程序中的?username = ...”,这意味着任何外部知道可以进入我们的应用程序而无需先由他们进行身份验证。在URL上输入密码几乎没有帮助......有什么建议可以解决这个问题吗?或者只是“确保首先保护对网页的访问权限,以便用户无法直接访问您的应用程序”?

希望这不会太久。我知道这是一个模糊的区域,任何建议都会受到赞赏。

4 个答案:

答案 0 :(得分:1)

警告:这可能不言而喻,但你应该长时间地思考这个问题。使用您给出的参数,您可能会冒险将整个系统打开给任何有兴趣开始探索的人。我不确定您的数据的性质有多敏感,但只需要一次破解和愤怒的客户,您可能会遇到很多热水。

如果你不打算让你的顾客在他们的最后做很多工作,你的选择将会非常有限。

在频谱的非常便宜的一端你可以要求他们链接到你网站上的页面,在那里他们传递查询字符串中的某种siteId和用户名,然后你可以至少确保引用URL(www.yourcustomersite.com)与您在某个表格中保留的siteId相匹配。

这样做的缺点是引用者可能被欺骗,所以它不是一个非常简单的解决方案,但总比没有好。

如果您可以让您的客户完成一些工作,您至少可以为每个用户提供唯一的身份验证令牌,并要求他们向您发送令牌而不是用户名。那样你可能会得到?siteId = yourCustomer& authToken = DKDlas29df9aa01sk而不是用户名。

同样,它并没有好多少,但至少让蛮力攻击变得更加困难,但并不多。

希望这会有所帮助。祝你好运!

答案 1 :(得分:1)

你想过票务吗? 他们是否有兴趣实施Web服务,为在其Web应用程序上登录的用户颁发票证。然后,当用户访问您的Web应用程序时,您可以检查他的票证(实际使用Web服务进行验证)...这是一个小问题,关于客户端的浏览器如何保存票证......

另一方面,我看到使用OpenID的用户中的stackoverflow日志...(用户需要输入他们的凭据两次,但他们将使用相同的帐户)这对他们来说是否足够好?

答案 2 :(得分:0)

很难,但是我建议利用ASP.NET Membership框架,然后编写自己的Membership provider来与他们的身份验证方案进行交互,但是如你所设想的那样,从安全的角度来看,只是一个URL是不够的。

答案 3 :(得分:0)

请先查看this blog post,这是ASP.net网络应用程序中单点登录的综合指南。

现在,关于针对不同域中的站点提供的解决方案(如果您位于完全不同的域中,则无法共享身份验证cookie)我认为它存在一些严重的安全问题。我们在一个SSO网站上做了类似于Andrei建议的事情。当用户登录到主站点然后想要访问辅助站点时,指向站点的链接会保留票证(我们使用随机Guid)。主站点存储与Guid相关联的数据库会话信息和创建时间(用于票证到期)。当辅助站点检测到新的未经验证的用户以及通过Web服务与主站点联系的票证时,辅助站点将检查该票证并返回其存储的所有会话信息。然后,另一个站点可以对用户进行身份验证并发出自己的身份验证cookie。当用户浏览另一个站点时,你必须实现一些东西来保持主站点会话的活跃性,这样如果他一段时间不在,他就不需要登录。这可以通过持久cookie或辅助站点中的iframe指向主站点中的虚拟页面来实现。

相关问题