请注意,我要求的是架构/工作流程的想法,而不是实现。我几个月以来一直坚持这个......我想出的所有想法都有一些“不可能做”或“安全无意义”的部分。
我想整合2个独立网站的身份验证。其中一个是ASP.NET Identity(INNER),另一个(OUTER)具有基于自定义表单的身份验证。 OUTER在LAMP上实现。我非常熟悉ASP.NET身份编程,一旦我对架构和工作流有所了解,就会解决其他编程任务。
基本要求是OUTER网站可能包含包含内容来自INNER的iframe的网页。访问OUTER和INNER页面需要身份验证,但我希望通过OUTER应用程序验证和管理用户。在INNER页面中了解用户的身份是必须的。
在OUTER上创建/更改用户的即时同步不是必需的,从OUTER到INNER的定期单向复制将执行此操作。我知道我可以复制除密码之外的所有内容。
思路:
使用技术用户进行INNER并在javascript中挂钩OUTER并使用技术用户登录INNER发送身份信息(OUTER用户名)。在INNER的服务器端切换从技术到发送标识的标识。这是我听过的最糟糕的:技术用户密码暴露在客户端,因此属于“安全废话”
使用技术用户进行INNER并在服务器端中挂接OUTER登录,并使用技术用户登录INNER发送身份信息。在INNER的服务器端切换从技术到发送标识的标识。好的,这不是“安全无稽之谈”。既不太复杂,但是这种情况下INNER的“认证客户端”不是浏览器,而是OUTER服务器应用程序,因此没有cookie。发送给INNER的所有iframe请求仍然未经过身份验证。
与4相同,加上:通过代理对INNER的所有请求,也由OUTER提供服务。在OUTER的服务器端创建的客户端首先登录(等等,如4中所示),然后在其会话中维护一个cookie容器。因此,当代理所有后续请求时,它们将被计为INNER应用程序中的authenitcated请求。问题:似乎过于复杂。创建这样一个透明的代理并不像看起来那么简单。 (正确处理POST和GET,处理重定向,内容类型等)
如果上述任何一种情况都没问题,但我错误地评估它们无法使用,或者任何人有第7个想法请分享。