我有两个域:sharepoint.server.com和app.server.com
在域app.server.com的应用程序中,我在服务器sharepoint.server.com上执行了不可见的ntlm身份验证。
sharepoint.server.com返回给我的cookie。如何将这些cookie写入浏览器的内存?
可以编写这些cookie,但只能使用域app.server.com,但我需要使用域sharepoint.server.com编写它。
因此,如果将其写入浏览器的内存,则sharepoint.server.com将永远不会再根据现有cookie显示身份验证用户窗口。但是,它无法读取这些cookie,因为它是不同的域。
DefaultHttpClient httpClient = new DefaultHttpClient(cm,params);
httpClient.getAuthSchemes().register("ntlm", new NTLMSchemeFactory());
httpClient.getCredentialsProvider().setCredentials(new AuthScope(AuthScope.ANY),
new NTCredentials("login", "pass", null, "server.net"));
HttpGet httpget = new HttpGet("htts://sharepoint.server.com/");
HttpResponse response;
try {
response = httpClient.execute(httpget);
StatusLine entity = response.getStatusLine();
System.out.println("executing request " + httpget.getRequestLine());
System.out.println(entity.toString());
System.out.println("");
Header[] headers = response.getAllHeaders();
for (Header header : headers) {
System.out.println(header.getName() + " : " + header.getValue());
}
List<Cookie> cookies = httpClient.getCookieStore.getCookies();
for(Cookie cookie:cookies)
{
JavaApp.getInstance().getMainWindow().executeJavaScript(
"document.cookie='" + cookie.getName()+"="+cookie.getValue() +"; domain="+cookie.getDomain()+"; path="+cookie.getPath()+"'");
}
现在它根本不写cookie,因为cookie.getDomain()= sharepoint.server.com,并且无法写入。
如果我从该行删除domain = cookie.getDomain(),它会将cookie写入该组织,但使用域名“app.server.com”
但我需要使用域sharepoint.server.com
编写这些cookie怎么可能成功呢?
答案 0 :(得分:2)
您无法为其他域设置Cookie。如果可以的话,它可能是有史以来最严重的安全漏洞。
想象一下,如果你能为Facebook,谷歌等编写cookie ......
检查此主题,我认为它可以帮助您找到好的解决方案:How to set a cookie for another domain
编辑:
在SO上发现的另一个解决方案:Cross-Domain Cookies,它可能是您正在寻找的。 p>
答案 1 :(得分:0)
将身份验证cookie的域设置为域部分,不包含子域:
JavaApp.getInstance()
.getMainWindow().executeJavaScript(
"document.cookie='" + cookie.getName()
+"="+cookie.getValue()
+"; domain=server.com; path="
+cookie.getPath()+"'");
现在,server.com的所有子域都可以访问此cookie