单一登录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.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,并使用has.myDomain.com和b.myDomain.com已知的散列关键字 请注意,您将无法访问cookie客户端(因此,没有js cookie处理,除非是服务器端js,例如nodejs)
使用Java或.NET现有解决方案不太可能在其他平台上运行。 你需要几个功能:
你怎么能做到这些?
如果你有这两条信息,你可以在每个系统上进行认证。
我建议使用企业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