微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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)

原文地址:https://www.jb51.cc/csharp/99559.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐