c# – 单点登录,有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时只能降低一级: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机制

所以你可能会:

>在a.domain.com上启用表单身份验证
>成功登录后,构建一个myToken cookie,其中包含userId和散列的userId,其中包含a.myDomain.com和b.myDomain.com已知的散列密钥
>使用域.myDomain.com设置cookie
>当用户输入b.myDomain.com时,检查cookie服务器端(在java中)是否匹配userId和散列值
>如果cookie正确,请打开用户userId的会话

请注意,您将无法访问cookie客户端(因此没有js cookie处理,除非它是服务器端js,例如nodejs)

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...