我在域a.domain.com(http)上有一个单页面应用程序(SPA),它连接到播放2(scala)中b.otherdomain.com(https)版本上的api。
加载SPA后,用户输入凭据,应用程序对https://b.otherdomain.com.com/login进行ajax调用。
/ login设置Play cookie,并且以下请求经过良好的身份验证。 一切都适用于Chrome和Firefox(因为CORS限制而不是IE)。
它应该在Safari上工作,但在/ login调用之后,cookie不会随着以下请求发回,因此play返回“401 not authorized”响应。
这是我服务器端的错误还是配置错误? 我是否必须更改application.session.httpOnly和application.session.secure?
以下是我从Safari检查员看到的内容:
/login headers :
URL de la requête:https://b.otherdomain.com//login
Méthode de la requête:POST
Code d’état:200 OK
En-têtes de requêteafficher la source
Accept:application/json, text/plain, */*
Content-Type:application/x-www-form-urlencoded
Origin:http://a.domain.com.com
Referer:http://a.domain.com/
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2
Données du formulaireafficher l’URL codée
email:foo@foo.com
password: foofoo
En-têtes de réponseafficher la source
Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:http://a.domain.com
Connection:keep-alive
Content-Length:31
Content-Type:text/plain; charset=utf-8
Set-Cookie:PLAY_SESSION=a71f93e3315fa9164dd7112841ccdb4a0f0c447b- sessionId%3A6gtu7%21z.5i%218d%29v8yxy693n-s6zsuejpav_p67f9hb%7Ej%274h2de*jx3g35p%7Egzo0u;Path=/;HTTPOnly
Strict-Transport-Security:max-age=31536000
following request :
URL de la requête:https://b.otherdomain.com/users
Méthode de la requête:GET
Code d’état:401 Unauthorized
En-têtes de requêteafficher la source
Accept:application/json, text/plain, */*
Origin:http://a.domain.com
Referer:http://a.domain.com/
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2
En-têtes de réponseafficher la source
Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:http://a.domain.com
Connection:keep-alive
Content-Length:24
Content-Type:text/plain; charset=utf-8
Strict-Transport-Security:max-age=31536000
答案 0 :(得分:0)
我遇到了同样的问题。它在Chrome中运行良好,但在Safari中根本没有。我的理解是,这是与third party Cookies相关的Safari的新限制。
似乎没有(好的)工作。
选项: - 使用代理:服务器a上的设置和端点呼叫b服务器端。 - 将b的c-Name DNS条目视为
您可能需要尝试使用PayPal跨域套件:https://medium.com/@bluepnume/introducing-paypals-open-source-cross-domain-javascript-suite-95f991b2731d