从Angular到其他服务器的GET呼叫中不包括Cookies?

从Angular到其他服务器的GET呼叫中不包括Cookies?,angular,authentication,cookies,single-sign-on,cross-domain,Angular,Authentication,Cookies,Single Sign On,Cross Domain,我们有一个有棱角的网站,我们称之为https://webui.foo.com。我们正在将我们的基础设施转移到SOA(面向服务的体系结构),因此我们已经将许多特定于业务的功能转移到各种服务器上基于web api的端点 最近,我们从身份验证服务器(authsvc.foo.com)构建了对SSO(单点登录)的SAML2支持。标准流程是,webui为客户端提供了一个链接,可以将它们重定向到https://authsvc.foo.com/sso/saml2?idp=some-idp和重定向URL=http

我们有一个有棱角的网站,我们称之为
https://webui.foo.com
。我们正在将我们的基础设施转移到SOA(面向服务的体系结构),因此我们已经将许多特定于业务的功能转移到各种服务器上基于web api的端点

最近,我们从身份验证服务器(authsvc.foo.com)构建了对SSO(单点登录)的SAML2支持。标准流程是,webui为客户端提供了一个链接,可以将它们重定向到
https://authsvc.foo.com/sso/saml2?idp=some-idp和重定向URL=https://webui.foo.com/sso-response

认证服务在该端点上获得请求后,将查找第三方IDP(身份提供者),加载其元数据,并将质询重定向到IDP。然后,IDP将正确地对用户进行身份验证,并向身份验证服务返回一个断言,我们可以使用该断言来验证和识别用户。一旦发生这种情况,身份验证服务将设置一个名为
SSOToken
的短期加密cookie,该cookie仅可用于
https://authsvc.foo.com/api/auth/sso
并将重定向发送到webui发送的原始URL中指定的
重定向URL

接下来应该发生的是
/sso响应
端点(角度端点)应该立即执行对
https://authsvc.foo.com/api/auth/sso
使用
SSOToken
cookie,当authsvc看到该cookie并对其进行验证时,将使用有效的JWT和刷新令牌进行响应,以便在我们的web应用程序中使用

我们可以使用类似
URL的URL来测试身份验证服务的组件https://authsvc.foo.com/sso/saml2?idp=some-idp和重定向URL=https://authsvc.foo.com/api/auth/sso
,它在浏览器上向我们显示(通过SAML进行身份验证后)预期的JWT和刷新令牌。。。所以这部分似乎工作正常

然而。。。当我们得到
https://authsvc.foo.com/api/auth/sso
\sso响应
角度端点,我们得到一个401。查看请求,我们看到请求中根本不包含
SSOToken
cookie。。。这似乎很奇怪,因为它似乎应该从浏览器中自动设置,但它显然没有这样做

我们已经读了一些关于使用带有凭据的
,但这似乎没有什么区别。也有一些关于CORS的讨论,但我们没有收到任何CORS错误或警告。。。我们只是没有将cookie附加到请求,即使浏览器肯定知道cookie


这是怎么回事?我们做错了什么?很抱歉,我不是一个有棱角的人(我在身份验证服务器上构建了SAML支持),因此我无法理解前端需要做什么(或不做什么)来完成这项工作。

cookie是如何设置的,有哪些选项和配置

Cookie有一个“域”部分,告诉浏览器它所属的位置。
如果希望将其发送到所有子域,如
webui.foo.com
authsvc.foo.com
,则需要在域前面设置一个点,如so
.foo.com

您的角度端点
\sso响应
可能不知道有一个cookie需要附加到请求

查看youtube如何设置cookie域:

因此,原来罪魁祸首是
SameSite
Cookie属性。我已将其设置为“Lax”,认为这将允许跨站点通信工作。。。但是没有。显然,现代浏览器不赞成在cookie上没有“安全”属性。谁知道呢?我想这是有道理的,但这并不是我真正需要担心的跨站点安全问题,所以我没有考虑这一点


我最后做的是将Cookie属性更改为
SameSite=None;安全
,cookie随请求一起传输。我希望我仍然可以将
Lax
设置与
Secure
设置一起使用,但我发现了一些有效的方法,因此我将继续使用它。

这些值非常有针对性:Domain=authsvc.foo.com,Path=/api/auth/sso,SameSite=Lax