如何将ASP.NET身份与其他站点的身份验证集成?

时间:2016-03-13 09:29:00

标签: authentication iframe asp.net-identity

请注意,我要求的是架构/工作流程的想法,而不是实现。我几个月以来一直坚持这个......我想出的所有想法都有一些“不可能做”或“安全无意义”的部分。

我想整合2个独立网站的身份验证。其中一个是ASP.NET Identity(INNER),另一个(OUTER)具有基于自定义表单的身份验证。 OUTER在LAMP上实现。我非常熟悉ASP.NET身份编程,一旦我对架构和工作流有所了解,就会解决其他编程任务。

基本要求是OUTER网站可能包含包含内容来自INNER的iframe的网页。访问OUTER和INNER页面需要身份验证,但我希望通过OUTER应用程序验证管理用户。在INNER页面中了解用户的身份是必须的。

在OUTER上创建/更改用户的即时同步不是必需的,从OUTER到INNER的定期单向复制将执行此操作。我知道我可以复制除密码之外的所有内容

思路:

  1. 在javascript中挂接OUTER,然后进行登录调用 INNER键入的用户名/密码。这创建了ASP.NET 登录cookie,以便当前存在经过身份验证的会话 浏览器窗口。 (也许我错了,但不幸的是 这没关系,因为其他原因是不可能的)。 这是“不可能做到的”,因为密码无法复制,因此INNER侧密码显然不同
  2. 创建从OUTER到INNER的用户/密码的即时同步 在javascript中挂接OUTER然后进行登录调用 INNER键入的用户名/密码。这创建了ASP.NET 登录cookie,以便当前存在经过身份验证的会话 浏览器窗口。 (这是真的吗?)。不幸的是,这是所以复杂且容易出错。 (说我们也必须抓住密码更改行动)。除此之外,OUTER应用程序必须在INNER中创建需要技术用户帐户的用户,因此所有用户都必须在OUTER应用程序的服务器端完成。
  3. 使用技术用户进行INNER并在javascript中挂钩OUTER并使用技术用户登录INNER发送身份信息(OUTER用户名)。在INNER的服务器端切换从技术到发送标识的标识。这是我听过的最糟糕的:技术用户密码暴露在客户端,因此属于“安全废话”

  4. 使用技术用户进行INNER并在服务器端中挂接OUTER登录,并使用技术用户登录INNER发送身份信息。在INNER的服务器端切换从技术到发送标识的标识。好的,这不是“安全无稽之谈”。既不太复杂,但是这种情况下INNER的“认证客户端”不是浏览器,而是OUTER服务器应用程序,因此没有cookie。发送给INNER的所有iframe请求仍然未经过身份验证。

  5. 与4相同,加上:通过代理对INNER的所有请求,也由OUTER提供服务。在OUTER的服务器端创建的客户端首先登录(等等,如4中所示),然后在其会话中维护一个cookie容器。因此,当代理所有后续请求时,它们将被计为INNER应用程序中的authenitcated请求。问题:似乎过于复杂。创建这样一个透明的代理并不像看起来那么简单。 (正确处理POST和GET,处理重定向,内容类型等)

  6. 一些基于令牌的东西?在OUTER中实现一些API并让INNER回到OUTER来验证请求?这应该在每个请求中? (这种情况它确实不适合ASP.NET身份,没有创建经过身份验证的会话。这似乎没有使用ASP.NET身份,所以有点重新发明轮子。
  7. 如果上述任何一种情况都没问题,但我错误地评估它们无法使用,或者任何人有第7个想法请分享。

0 个答案:

没有答案