使用自定义 webscript 在 Alfresco 中修改审计跟踪

Modify audit trail in Alfresco using a custom webscript

我正在编写一个自定义 Java 网络脚本,它接受文档 noderef 和外部用户名(字符串值)作为参数。我启用了审核,当我调用 webscript 时,审核日志显示对文档的访问。现在我想知道是否可以修改审计跟踪,以便在显示该特定文档的日志时也显示外部用户的名称。

网络脚本url:http://localhost:8080/alfresco/service/node/{noderef}/user/{user}

调用它时,我在日志中得到以下输出:

Extracted audit data: 
    Application:    AuditApplication[ name=alfresco-access, id=1, disabledPathsId=2]
    Values:         
        /alfresco-access/transaction/sub-actions=readContent
        /alfresco-access/transaction/action=READ
        /alfresco-access/transaction/node=workspace://SpacesStore/c21db432-4ad6-4af2-8bcf-78bc89724afe
        /alfresco-access/transaction/type=cm:content
        /alfresco-access/transaction/path=/app:company_home/app:shared/cm:audit-services-context.xml
        /alfresco-access/transaction/user=admin

    New Data: 
        /alfresco-access/transaction/sub-actions=readContent
        /alfresco-access/transaction/action=READ
        /alfresco-access/transaction/type=cm:content
        /alfresco-access/transaction/user=admin
        /alfresco-access/transaction/path=/app:company_home/app:shared/cm:audit-services-context.xml

我也想将 {user} 存储在审计跟踪中。

您可以尝试使用AuthenticationUtil.setFullyAuthenticatedUser。我认为这应该对你有帮助。但是我没有测试这个。

您可能不想这样做,至少不想以您描述的方式这样做,而且还需要采取额外的安全预防措施。

恕我直言,这违反了安全标准,如果管理员需要阅读文档,则需要使用他的用户名记录操作,如果普通用户需要访问文档,则需要对该操作进行适当的身份验证.

从我的小背景来看,我会说这实际上是与其他不与 Alfresco 共享 SSO 的应用程序的集成。所以我会推荐以下解决方案:

  • 在 Alfresco 和您的应用程序之间使用正确的 SSO,让相关用户在 Alfresco 中 ping 正确的端点,并让 SSO 为您正确验证请求。

  • 使用共享密码(类似于共享密码来编码请求中的授权名称 + 适当的身份验证子系统或请求过滤器来处理)或密钥对(类似于 solr 之间的 securecomms和露天),以便能够安全地将授权信息传递给请求

  • 使用系统帐户(最好不是管理员帐户,而是专用于此 usecase/application 集成的帐户)为相关用户生成有效的 alf_ticket,并您的应用将该票附加到请求中。 (当然,您的 "impersonate" 网络脚本需要在 运行 代码片段之前检查正确的 system/integration 用户名,以从 runAsSystem 块中获取 alf_ticket。在这种情况下,我还建议不要为此使用管理员帐户,而是使用除此用例之外完全没有权限的用户。

如果您打算选择快速实施,我至少会推荐以下内容:

  • 您需要确保没有任何用户可以 ping 该网络脚本,并且只有 admin/system 用户可以实际访问该网络脚本。

  • 您可能应该在审计跟踪中记录整个模拟操作(使用相同的审计条目或单独的条目),以便清楚这实际上是一个操作代表用户而非直接由用户本人

  • 如果您将有问题的 webscript 用于读取节点内容以外的任何其他内容(如果您的 onReadContent 行为也有一些令人讨厌的 AuthenticationUtil.setFullyAuthenticatedUser,也可能是这种情况),并且您要求将该操作记录为 system/originally 经过身份验证的用户,您可能很难做到这一点......您应该切换到更可靠的方法!