我有网站A帐户的用户。网站A已经存在很长时间了,更改代码的成本很高(但并非不可能)。
站点B(我现在正在处理它!)为站点A的客户托管一个全新的Web应用程序。站点B应用程序有一个站点A的用户名列表,并维护每个站点的首选项和其他信息那些与其使用站点B有关的用户。站点A和B是不同的平台。我认为Site A是coldfusion,而Site B是ASP.NET MVC。
我希望用户能够点击站点A中的链接,将其记录到站点B上的应用程序中。我认为它可能会像这样工作:
0)如果用户试图直接进入站点B,他们只是被重定向到站点A进行身份验证。
1)用户登录到站点A.
2)登录到站点A后,他们可以单击链接将他们带到站点B.我以为我会使用用户名从站点A到站点B进行HTTP发布,因此站点B知道谁在登录以及如何根据自己的喜好渲染页面。
当然,我不希望任何Joe Schmoe能够使用用户名对站点B进行HTTP POST并以该用户身份登录。
所以我想知道,如果使用证书或其他东西,我可以这样做,以便网站B能够确定POST确实来自网站A.我需要/我可以使用证书吗?也许网站A可以某种方式“签署”其帖子,以便网站B可以确定帖子来自网站A?
或者只是一个密码就足够了,网站A通过SSL发布密码以及只有网站B知道的用户名?
我也对网站A发布用户名和网站B的GUID的想法持开放态度,然后网站B会通过网络服务“询问”网站A,如果这确实是最近的有效GUID,那么事实源于A站点,但这似乎是我可以消除的旅行。
我希望这是足够描述性的。请随时让我解释一下。谢谢您的帮助。 :)
答案 0 :(得分:2)
另一种选择是......
用户登录网站A.
网站A创建与此用户关联的guid,但会在5秒或短时间内过期。
用户被重定向到siteB?UserID = SomId& ConfirmationId = Some Guid
站点B调用站点A上的Web服务,传递UserID和Guid并检查这是否是有效的重定向。 (Web服务只返回true或false)。
这解决了您的信任问题,因为站点B明确查询站点A,因此站点B知道它正在使用站点A进行身份验证,而不是盲目地相信确认来自站点A的重定向。 / p>
此外,一个Guid是独一无二的,它不太可能被黑客猜到,最后,到期使得如果黑客猜到了guid,它可能会在猜到的时候到期。
当然,您希望通过SSL完成所有这些工作。