Cookies 不会存储OIDC js库响应cookie,也不会附加到后续请求

Cookies 不会存储OIDC js库响应cookie,也不会附加到后续请求,cookies,oauth,openid-connect,oidc-client-js,oidc-client,Cookies,Oauth,Openid Connect,Oidc Client Js,Oidc Client,我将authcodeflow与PKCE一起使用 在前端使用OIDC js库,调用ADF获取身份验证代码,然后调用我的后端api。调用adfs服务器的后端api获取访问令牌,后端api将令牌作为cookie返回给前端。我可以在响应标题中看到cookie。但该cookie不会存储在浏览器中,也不会被添加到后续请求中。我用samesite尝试了所有模式->松弛、无、严格和不设置。 这是OIDC js库的一个问题,还是阻止了Cookie存储在浏览器中 更新: 以下是我的观察和分析 因为OIdc客户端js

我将authcodeflow与PKCE一起使用

在前端使用OIDC js库,调用ADF获取身份验证代码,然后调用我的后端api。调用adfs服务器的后端api获取访问令牌,后端api将令牌作为cookie返回给前端。我可以在响应标题中看到cookie。但该cookie不会存储在浏览器中,也不会被添加到后续请求中。我用samesite尝试了所有模式->松弛、无、严格和不设置。 这是OIDC js库的一个问题,还是阻止了Cookie存储在浏览器中

更新: 以下是我的观察和分析 因为OIdc客户端js没有为请求将标志“withCredentials”设置为true的选项。请求中没有发送Cookie,跨源请求的响应Cookie被忽略。此更改被标记为增强,并且在他们的github repo中仍未完成。

有什么方法可以实现这个库吗?或用于OIDC js的任何其他库


因此,您正在从作为WEB域同级的API域发出cookie:

  • web.mycompany.com
  • api.mycompany.com
  • Cookie域=.mycompany.com
删除COOKIE的可能原因

可能是withCredentials标志,也可能是由于缺少用户手势,因为用户没有做任何明确的操作来导航到api.mycompany.com,例如浏览器导航或单击链接

使用凭据强制执行

您可以像这样覆盖原型以添加withCredentials属性。这是一个小问题,但您可以根据URL限制使用,它应该让您知道设置凭据是否可以解决您的问题:

let open = XMLHttpRequest.prototype.open;  
XMLHttpRequest.prototype.open = function(method, url) {  
    open.apply(this, arguments);
    this.withCredentials = true;
}  
通过WEB域代理将减少COOKIE问题


在我的示例中,我执行类似于包含刷新令牌的代理消息的操作。不过,我使用的是web的确切域,而不是API子域。这永远不会受到浏览器限制的影响。

是的,例如,我的前端是web.example.com,api是api.example.com。在这种情况下,两者都在同一个域下。是的,它们是不同的子域,但是当我用“.example.com”标记我的域时,它应该可以正常工作。我已经尝试过,它可以正常工作。唯一的问题是调用是从oidc客户端js进行的。因为库没有用“withCredentials=true”标记请求“。否则浏览器将忽略响应cookies,并且不会向请求发送任何cookies。确定-使用您可以使用的解决方法更新了我的答案-有兴趣查看这是否解决了您的问题..是的。这很有效。非常感谢您抽出时间。但有一件事我想知道,这是一个很好的做法,不会导致任何性能或其他问题吗?这是最后一个解除阻止的选择-希望在某个时候,库作者会提供一个扩展点,比如允许您重写OIDC令牌客户端类-然后您可以删除该攻击。