【发布时间】:2014-03-04 17:32:33
【问题描述】:
我在 ASP.net 中编写了两个面向 Internet 的网站:example.com 和 site1.example.com
每一个都部署在不同地理位置的自己的服务器上。
site1.example.com
- 托管第三方应用程序
- 使用窗体进行 Windows 身份验证(本地 Windows 用户)
- 我拥有完整的服务器访问权限。
- 我只能修改配置/查看代码(我不能修改二进制文件)
example.com
- 我可以更改的所有自定义代码
- 针对数据库的表单身份验证
需要发生的是
- 用户登录
example.com - 从数据库中检索 Windows 凭据(基于当前登录的用户)
- 用户在后台通过
site1.example.com进行身份验证 -
example.comsite1.example.com上的资源链接 - 用户现在可以访问
site1.example.com上的资源
我已经创建了这个 hack 来让它发挥作用:
- 将加密凭据附加到
site1.example.com登录网址 - 在
example.com上创建隐藏的 iFrame,指向特殊的登录 url。 - 修改
site1.example.com登录页面为- 解密登录凭据
- 在用户名/密码框中输入它们并点击通过 JavaScript 提交
最终发生的情况是site1.example.com 必须加载两次,然后它的资源才能可用(一次显示登录页面,一次在页面提交后),这可能需要一些时间。
有没有办法让example.com 在单个请求的后台通过site1.example.com 进行身份验证(与我现在正在执行的两个请求相对)?
Impersonate Identity 在site1.example.com 方面似乎很有希望,但如果我从视图中运行它,它的代码实现会起作用吗?
Federated Identity 似乎是这里的关键,但它非常压倒性。我可以在一端不修改二进制文件的情况下实现它(示例)吗?它是否适用于表单和 Windows 身份验证的组合,还是仅允许 Windows 用户跨不同的 Windows 域进行链接。
【问题讨论】:
-
您是否针对 AD (Active Directory) 进行身份验证?或者 FormsAuthentication 针对在两个不同位置之间同步的散列用户凭据数据库(因此我们忽略您的“本地 Windows 用户”)?还是?
-
@Ted
example.com:带有散列凭据的 FormsAuthentication。site1.example.com:与 example.com 有不同的用户。使用窗体进行 Windows 身份验证。我假设它的广告 -
也许跨应用程序的表单身份验证可以工作,但前提是 Web 场可以拥有由不同提供商提供的两个不同服务器。更多信息:msdn.microsoft.com/en-us/library/eb0zx8fc%28v=vs.100%29.aspx 所以我不确定如何解释网络场。