我有两个不同的web应用程序构建使用ASP.net MVC。这两个应用程序可能不在同一台服务器上运行,也可能不在同一域中运行。
我想,如果一个用户登录其中一个,应该自动登录在另一个。同样的情况也适用于注销。
你认为哪一个是最好的解决办法?你知道一些示例代码吗?
谢谢!
-编辑有更多信息--
用例场景:
用户在选项卡上打开了web应用程序A,在应用程序的某个点有一个链接将用户重定向到web应用程序B。如果他登录了A,我想向他展示完整的页面,如果没有,请将他重定向到登录表单。
为什么我要这么做:
应用程序A和B已经构建完毕。显然,访问B的唯一方法是单击位于A中的链接,只有在您以前登录过的情况下才会显示该链接。问题是,如果您知道B的某个页面的URL (长而复杂,但仍然如此),您可以在浏览器上编写它并访问B,这意味着存在安全问题。
发布于 2015-08-10 19:30:48
我假设您不能使用任何共享存储在应用程序A和B之间进行通信。(这可能允许一些共享的会话实现)。
这样做的行业标准方式(OpenID连接)就像其他一些答案所暗示的那样。我会尽量给出更多的细节,让你走上正确的轨道。
应用程序A和B都应该将身份验证过程转发给可信的第三方(可以托管在A、B或完全不同的应用程序中)--让我们称之为C
当用户到达A或B(不管B有奇怪的复杂URL,她总是可以书签这些URL),他的请求应该包含一个授权令牌。如果没有,她没有经过身份验证,将被重定向到C,并给出了一些登录机制--比如用户/通行证表单。
成功登录后,她将被重定向回A/B (取决于她来自何处),以完成她对身份验证令牌所做的一切。现在,有了身份验证令牌,她就被认证了。
如果她使用A进行身份验证,然后重定向到B,则此重定向也应该包含令牌,B将知道如何信任该令牌。
现在,如果他打开一个新的选项卡,B将不会看到任何标记,因此她将被重定向到C,结果被重定向回(她已经通过身份验证了,还记得吗?)现在一切都好了。
我描述的是一个使用OpenID连接的常见流程,如果使用.net,我真的建议使用Thinktecture的IdentityServer来为您做艰苦的工作,成为您的"C“。
另一种选择是支付作为SaaS应用程序托管的"C“的费用--签出Auth0。
发布于 2015-08-04 11:17:17
我的答案可能不是最好的,但你可以使用一些棘手的机制,如
发布于 2015-08-06 07:15:14
您可以在项目中实现OAuth。您可以在这里获得更多帮助:http://www.openauthentication.org/about
https://stackoverflow.com/questions/31721079
复制相似问题