使用子域来识别客户端

时间:2020-03-06 14:59:53  来源:igfitidea点击:

我正在构建Silverlight应用程序,而我们希望能够让客户端按如下所示的网址进行操作:

http:// {client} .domain.com /

并登录,其中{client}部分是他们的公司名称。因此,例如,谷歌的将是:

http://google.domain.com/

我想知道的是,是否有人在Silverlight中能够使用此子域模型来决定对Web服务器的调用,以便我们可以切换到特定的数据库来运行查询?不幸的是,这对于项目来说是非常必要的,因为我们正在努力使他们的员工更容易获得他们公司软件的特定信息。

解决方案

在服务器端,我们可以检查HTTP 1.1主机标头,以查看用户如何来到服务器并基于此进行必要的自定义。

我认为我们不能仅使用Silverlight来做到这一点,我知道我们不能在没有Javascript,Ajax等问题的情况下做到这一点。那是因为出于安全原因,子域不是浏览器的子页面,而是出于安全原因。

以下想法如何:将重写规则插入Web服务器软件。因此,如果调用了http://google.domain.com,则网络服务器本身会将URL重写为类似http://www.domain.com/google/(或者更好的是:http://www.domain.com/客户/ google /)。那会帮助吗?

乔治·:

如果它是静态的,那会有所帮助,但是,a,它将是动态的。我希望对应用程序进行1x部署,并使用http://google.domain.com/想法为用户切换到正确的数据库。我记得当我们建立一个asp.net网站,使用域上下文找出要使用的皮肤等等时,这样做一次。

阿特斯:我们能详细说明意思吗?听起来像我们接近我要提出的内容。我们是否看到过这样的教程?

我想出的唯一另一种方法是拥有一个元数据库,当用户登录时,它会根据需要将它们切换到适当的数据库……我也想告诉客户x:

http://ClientX.domain.com/比说打http://www.domain.com/登录要好得多。似乎他们要打出自己的名字,并直接从登录屏幕上为他们显示个性化名称,对于客户群而言将更具吸引力。

@Richard B:不,我想不起以前见过的任何此类教程。我会变得更加冗长。

服务器端方法更详细:

  • 在DNS设置中将* .example.com定向到相同的IP。
  • 处理登录的后端应用会检查"主机" HTTP标头(例如,在某些平台中为" HTTP_HOST"服务器变量)。那将包含客户端用于访问我们服务器的确切subdomain.example.com。提取子域部分并继续...

也可以有仅客户端方法。我对Silverlight不太了解,但我假设我们应该能够将Silverlight与JavaScript进行接口。我们可以使用JavaScript读取" document.location"并将其传递到Silverlight小程序,在此进一步的数据提取等。逻辑将依赖于JavaScript传递的子域。

@Ates:

这就是我们编写ASP.Net系统时所做的...将大量* .example.com主机推向Web服务器,并使用HTTP标头进行处理。与WCF进行处理时,会在客户端和服务器之间推送信息时产生延迟。它只能存在于一个域中。

因此,例如,当我们拥有{client} .example.com和{sandbox} .example.com时,则无法同时注册WCF服务。它也不能仅注册到* .example.com或者example.com,因此这就是捕获器22所在的位置。我所拥有的其他一切都已具备处理方面的知识。

我记得一种在某些情况下应用程序可以"欺骗"另一个域名的方法。在这种情况下,我需要做这样的配置吗?我相信还有很多研究需要。

将服务放在特定的子域本身(例如wcf.example.com),然后在服务上设置跨域策略文件以使其能够访问它是否行得通?

只要可行,我们就可以将Silverlight加载到适当的子域中,然后将该子域传递给服务并让其完成工作。

以下是一些示例:

  • Silverlight跨域服务
  • Silverlight跨域策略帮助器