我有一个使用Forms身份验证的ASP .NET Web应用程序。我们称这个应用为“Foo”。我正在创建另一个名为“Bar。”的ASP .NET应用程序。
我想要发生的是用户登录到Foo,然后单击一个链接,将它们带到Bar应用程序中的页面。 Bar应用程序不应要求Foo用户再次登录。 Foo应用程序应该将安全票证传递给Bar应用程序,然后用户可以在Bar应用程序中进行他/她的业务。
我还想限制对Bar应用的访问。因此,如果用户在未首先登录的情况下尝试访问Bar应用程序,则会将其重定向到Foo登录页面。
这可能吗?如果是这样,我该如何实现呢?
答案 0 :(得分:2)
我曾经这样做过,它是在一个PHP站点和一个ASP.NET站点之间(我是ASP.NET开发人员,但也了解一些关于PHP的内容)。
如果App1是用户的入口点,那么在登录时,App1应为该用户创建一个键值对,该键值由用户名和生成的密钥组成(例如GUID)。以编程方式,它应该与App2通信并发送此密钥(例如,启动后台线程)。假设用户John Doe在App1上成功登录。
App1生成一个密钥(3l3kjlk3j4lkj34,JohnDoe)并通过某种通信将其发送到App2(例如通过HTTP调用URL,例如www.app2.com/SetTempKey.aspx?userId=JohnDoe&key=3l3kjlk3j4lkj34-出于安全原因,仅允许来自某个IP的请求的页面。
App2将收到临时访问密钥并存储它。假设App2的登录页面位于www.app2.com/login.aspx。
在app1中,您将生成一个指向www.app2.com/login.aspx?tempKey=3l3kjlk3j4lkj34的链接,其中包含一个像“转到我们的app2”的标签。当用户单击链接时,将调用app2上的login.aspx页面。检查查询字符串是否存在tempKey查询字符串参数,然后检查临时密钥存储app2中密钥的有效性,发现此 REALLY 是JohnDoe。
App2只需通过调用FormsAuthentication.RedirectFromLoginPage(“JohnDoe”,true)来记录他(首先是用户名,然后如果formsAuth cookie应该是持久的/ not_session_lived)。
......这就是它。