我目前正在为上述问题寻找一个很好的解决方案。我们可能会在.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应用程序中登录了吗?
答案 0 :(得分:2)
只要mydomain.com
不在公开后缀列表(http://publicsuffix.org/list/)中,a.mydomain.com
就可以为.mydomain.com
(请注意,您只能在放置Cookie时降低一级:a.b.mydomain.com
无法放置.mydomain.com
Cookie
Cookie将发送到b.mydomain.com
(以及*.mydomain.com
和mydomain.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机制
所以你可能会:
myToken
cookie,其中包含userId和散列的userId,其中包含a.myDomain.com和b.myDomain.com已知的散列密钥请注意,您将无法访问cookie客户端(因此没有js cookie处理,除非它是服务器端js,例如nodejs)
答案 1 :(得分:1)
使用Java或.NET现有解决方案不太可能在其他平台上运行。您需要几种功能:
你怎么能这样做?
如果您同时拥有这两条信息,则可以在每个系统上进行身份验证。
答案 2 :(得分:1)
我建议使用企业sso协议之一,Oauth2或ws-federation。这为您提供了组合服务的最大灵活性,您不仅可以联合这两种服务,还可以在以后轻松扩展您的应用程序环境。两种协议都不需要应用程序位于同一个域中。
虽然这对于您的简单需求来说听起来过于复杂,但无论将来您的应用程序发生什么,您都可以一次性解决sso问题。