清洁架构和身份验证。正确的方法?

Clean Architecture and authentication. Correct way?

我正在开发一个基于 Clean Architecture 模式的 Android 应用程序,我对如何以干净的方式实现用户身份验证存疑。就清洁架构而言,以下解决方案是否清洁?

我会创建如下用例(从表示层执行):

LocalTokenSource 接口将存储在域层中,其实现在数据层中 - 一种存储库)

并且为了在每次应用启动时执行令牌刷新(从用户的角度来看这不是一个用例,对吧?)我会在领域层创建 SessionManager 组件。 SessionManager 将负责刷新令牌并将其保存在 LocalTokenSource 中。每次 activity 启动时,我都会从它的演示者那里执行 refreshToken() 注入 SessionManager. 你觉得这个解决方案怎么样?

如果它是干净的,那么如何处理将令牌传递给远程服务以执行其他需要令牌的 API 方法?假设我有 PostsRepository 从远程服务获取帖子数据。我应该将令牌从用例传递到存储库方法,如 repo.getPosts(token) 吗?或者将 LocalTokenSource 注入存储库,以便它可以自己读取令牌?第二个选项不会违反 Clean Architecture 规则,因为 LocalTokenSource 会在 2 层中使用吗?

您必须决定的核心问题是:您是要将授权(以及令牌的使用)建模为业务逻辑的一个方面,还是要将其视为 "implementation detail".

如果您首先决定,有专门的用例,将 SessionManager 添加到域层并将令牌传递到存储库将是一致的建模。

如果以后决定,login/logout/refresh以及token的存在最好保存"behind the scenes",所以在framework或者gateway层

这两种方法都遵循 Clean Architecture 的规则(只要您不违反依赖规则)。