Spring Security 使用Spring Integration进行数据和/或消息源端身份验证

lsmd5eda  于 2022-12-18  发布在  Spring
关注(0)|答案(1)|浏览(158)

学习Spring Integration的安全性,尽管我 * 认为 * 我理解了如何锁定通道,使它们安全并强制认证/授权,但这只是“* 通道端 *”的集成。

@Bean
@GlobalChannelInterceptor(patterns = "secured*")
AuthorizationChannelInterceptor authorizationChannelInterceptor() {
    return new AuthorizationChannelInterceptor(AuthorityAuthorizationManager.hasAnyRole("ADMIN", "PRESIDENT"));
}

太棒了!它会锁定频道,这样频道只会接收来自拥有正确权限的用户的消息。
但是“* 客户端 *”(发送端)怎么办?
假设我用下面的代码创建了一个IntegrationFlow,它每5秒轮询一次FTP服务器以获取某个新文件:

@Bean
public IntegrationFlow ftpInboundFlow() {
    return IntegrationFlow
        .from(Ftp.inboundAdapter(this.ftpSessionFactory)
                .preserveTimestamp(true)
                .remoteDirectory("foo")
                .regexFilter(".*\\.txt$")
                .localFilename(f -> f.toUpperCase() + ".a")
                .localDirectory(new File("d:\\ftp_files")),
            e -> e.id("ftpInboundAdapter")
                .autoStartup(true)
                .poller(Pollers.fixedDelay(5000)))
        .handle(...)
        .get();
}

验证在哪里进行?FTP服务器上的 file 如何使用集成流“验证”自身?如果一个普通(非管理员)用户在该FTP服务器上放置了一个文件,而该文件只应由管理员用户放置和执行,该怎么办?换句话说:对于ADMIN/PRESIDENT角色,此处实际评估的是哪个用户/主体?从FTP服务器读取文件时,此处使用的是哪个用户,身份验证是如何工作的?
我想我从根本上误解了一些东西...我只是不知道那是什么!谢谢你的帮助/澄清。

ngynwnxp

ngynwnxp1#

它不是这样工作的:您的系统有一个FTP专用用户,并且在配置ftpSessionFactory时使用其凭据。FTP服务器将此特定用户视为主体。它与系统中的角色和用户无关。为了获得更好的安全边界,它不能知道应用程序中的用户服务。这与连接到数据库时得到的结果完全相似:你使用了一些连接网址和一些用户名和密码。2这里的“管理员/总统角色”是什么?
从DB读取表时,此处使用的是哪个用户,身份验证是如何工作的?
您可以在应用程序中为该轮询操作启动一些人工主体。关键是源轮询通道适配器是由应用程序调度系统启动的。只是没有任何最终用户与安全配置中的主体相关联。

相关问题