我在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
答案 0 :(得分:0)
因此,您是从API域发布cookie,而该API域是WEB域的同级兄弟:
删除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子域名。这将永远不会受到浏览器限制的影响。