1

我正在将 authcodeflow 与 PKCE 一起使用。

在前端使用 OIDC js 库,调用 adfs 获取授权码,然后调用我的后端 api。调用 adfs 服务器的后端 api 获取访问令牌,后端 api 将令牌作为 cookie 返回到前端。我可以在响应标头中看到 cookie。但是该 cookie 没有存储在浏览器中,也没有为后续请求添加。我已经尝试使用所有模式的同一个站点 - > 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

4

1 回答 1

1

因此,您从作为 WEB 域兄弟的 API 域发出 cookie:

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

Cookie 被丢弃的可能原因

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

强制使用凭证

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

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

通过 WEB 域进行代理将减少 COOKIE 问题

在我的博客文章中,我做了一些类似于包含刷新令牌的代理消息的事情。我使用网络的确切域,而不是使用 API 子域。这永远不会受到浏览器限制的影响。

于 2020-10-22T20:02:02.093 回答