单一登录2个子域名,一个Java,一个.NET

我目前正在为上述问题寻找一个很好的解决方案。 我们可能会在.NET上运行表单身份验证。

我有在a.mydomain.com运行的ASP.NET MVC应用程序和在b.mydomain.com运行的基于Java的应用程序。

什么是最好的方法,以便我不必登录到每个应用程序。 说,当我登录到a.mydomain.com ,然后打开Java b.mydomain.com ,它会检查并看到我已登录?

WCF AuthenticationService类会为此工作吗? 我可以通过b.mydomain.com的JavaScript做一个AJAX请求来检查我是否已经在.NET应用程序中登录了吗?


只要mydomain.com不在公共后缀列表(http://publicsuffix.org/list/)中, a.mydomain.com就可以为.mydomain.com放置一个域cookie

(请注意,您只能在放入cookie时放下一个级别: abmydomain.com不能放置.mydomain.com Cookie)

该cookie将被发送到b.mydomain.com (以及*.mydomain.commydomain.com ),并可用作令牌打开会话。 所以一定要控制整个* .myDomain.com子域名并使其成为httpOnly并加密(https)

Response.SetCookie(new HttpCookie("myCookieName", "myCookieValue") { HttpOnly = true, Domain = ".myDomain.com", Secure=true });

Atlassian Crowd解决方案http://www.atlassian.com/software/crowd/overview的某些部分基于此Cookie机制

所以你可能会:

  • 在a.domain.com上启用表单身份验证
  • 成功登录后,构建一个myToken cookie,其值包含userId并散列userId,并使用has.myDomain.com和b.myDomain.com已知的散列关键字
  • 使用domain .myDomain.com设置cookie
  • 当用户输入b.myDomain.com时,检查cookie服务器端(在java中)userId和散列值之间的匹配
  • 如果cookie正确,请为用户userId打开会话
  • 请注意,您将无法访问cookie客户端(因此,没有js cookie处理,除非是服务器端js,例如nodejs)


    使用Java或.NET现有解决方案不太可能在其他平台上运行。 你需要几个功能:

  • 使用识别标识跟踪客户(会话,cookie)。
  • Java和.NET应用程序都能够获取相关信息。
  • 你怎么能做到这些?

  • 这其实很简单。 您使用的是同一个域,因此您可以在浏览器上为所有域放置一个cookie,这意味着对*和b *的请求都会将cookie发送到服务器。 Java和.NET都具有优秀的Cookie放置功能。
  • 这取决于你的后端。 什么是系统使用持久性存储? 如果您拥有两个系统连接的MySQL数据库之类的东西,则可以为每个存储的标识符创建一个包含登录信息的表以进行身份​​验证。 如果你采用这条路线,也可以暂停一些时间以使旧认证失效。
  • 如果你有这两条信息,你可以在每个系统上进行认证。


    我建议使用企业sso协议之一,Oauth2或ws-federation。 这使您在组合服务时拥有最大的灵活性,您不仅可以联合这两者,还可以稍后轻松扩展您的应用程序环境。 这两种协议都不需要应用程序在同一个域上。

    虽然这听起来可能过于复杂以满足您的简单需求,但您只需一次就可以解决问题,无论将来发生什么,都可以永久解决问题。

    链接地址: http://www.djcxy.com/p/68905.html

    上一篇: Single Sign on with 2 subdomains, one Java, one .NET

    下一篇: ASP.NET WebAPI passing empty string in urlencoded body as null