java - AADAuthenticationFilter 仅调用一次

标签 java azure spring-boot azure-active-directory

我从 https://github.com/microsoft/azure-spring-boot 下载了带有 spring boot 的 Azure AD 。只要我使用

运行azure-active-directory-spring-boot-sample,一切都很好并且工作正常
mvn spring-boot:run

如自述文件中所示。

我正在尝试一个基本的现实场景,其中 Angular/React 应用程序 使用 npm 在单独的端口上单独运行。当我将它们分离出来时,主过滤器 AADAuthenticationFilter 仅在第一个请求上调用一次,在该请求中执行 token 验证,而对于后续请求则不再调用。

我绕了一圈并配置了一个 nginx 代理,以便这两个域现在相同 localhost:9999 并且我根据下一个路径进行重定向,例如 npm 的 web 和 Spring boot 的 app 。这使得 cookie 在每次请求时都可用。

这很有帮助,因为我了解到 Spring 使用 cookie 来维护 session 。但理想情况下,AAD 过滤器应在每个请求时重新验证 token 。

但是,如果我将 azure.activedirectory.session-stateless=true 属性添加到我的 application.properties,如过滤器代码中所述,使其成为无状态并在每个请求上进行验证。它期望角色作为 AD 中的不同属性,而不是用户的一组。

我也不明白当 js 文件嵌入到 Spring 应用程序中并运行所有这些工作时, get 的行为完全正常,并且在每个请求时都会调用过滤器。但当我把它们分开时,它就不起作用了。

任何帮助或指示将不胜感激。

最佳答案

我意识到有人可能需要更多信息来调试上述问题。但我只是能够解决这个问题 - 至少找到了导致它的问题。就像我之前提到的,当我分离客户端和 Spring API 时,问题就开始了。由于客户端无法发回服务器设置的 cookie,由于域的更改,我不得不放置代理服务器。 后来我发现每个 GET 请求总是调用 AAD 过滤器。甚至多次请求。但其他请求(例如 POST、PUT)失败了。我尝试在 spring WebSecurityConfig.java -->> http.csrf().disable(); 中禁用 csrf 配置 这解决了我的问题,现在我收到了请求,一切都按预期进行。现在我想弄清楚如何不完全禁用 csrf。 谢谢

关于java - AADAuthenticationFilter 仅调用一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60241506/

相关文章:

java - Java 中的浮点精度和相等性

java - 如何从 PersistentSet 中获取可能为空的元素类型

azure - 创建 StorageManagementClient 和 EventGridManagementClient 时如何使用 VisualStudioCredential

c# - 将 Azure 流分析与 Power BI 结合使用

json - 使用Spring Boot从Elasticsearch中查询不可预测的JSON对象

java - Maven/Spring boot项目-如何跳过@SpringBootTest

java - 使用 FormDataMultiPart 发送实体和文件

java - 用java创建文档

java - 数据类型为 `TIMESTAMP(6) with Local Time Zone` 的 oracle 11g 在 csv 中存档了 Windows 和 Linux 中的不同数据

Azure 逻辑应用程序启动限制是否已解决?