OIDC js库响应cookie没有存储,也没有为后续请求附加

时间:2020-10-21 08:12:18

标签: cookies oauth openid-connect oidc-client-js oidc-client

我在PKCE中使用authcodeflow。

在前端使用OIDC js库,对adfs进行调用以获取身份验证代码,然后调用我的后端api。调用adfs服务器的后端api获取访问令牌,后端api将令牌作为cookie返回给前端。我可以在响应标题中看到cookie。但是该Cookie不会存储在浏览器中,也不会添加到后续请求中。我已经尝试过在所有模式下的samesite-> Lax,None,Strict而不是设置。 这是OIDC js库的问题,还是阻止cookie存储在浏览器中?

更新: 以下是我的分析观察 由于OIdc-client-js没有选择将请求的标志“ withCredentials”设置为true的选项。请求中没有发送任何cookie,跨源请求的响应cookie被忽略。此更改被标记为增强,仍未在github存储库中完成。 https://github.com/IdentityModel/oidc-client-js/issues/1062

此库有什么实现方法吗?或任何其他OIDC js库

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials

1 个答案:

答案 0 :(得分:0)

因此,您是从API域发布cookie,而该API域是WEB域的同级兄弟:

  • web.mycompany.com
  • api.mycompany.com
  • Cookie域= .mycompany.com

删除Cookie的可能原因

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

强制凭证

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

let open = XMLHttpRequest.prototype.open;  
XMLHttpRequest.prototype.open = function(method, url) {  
    open.apply(this, arguments);
    this.withCredentials = true;
}  

通过网络域代理将具有更少的Cookie问题

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