You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用AWS Cognito令牌创建Documentum IDfSession

问题描述

我已有如下获取AWS Cognito令牌的代码:

public static void main(String[] args) {

        AWSCognitoIdentityProvider cognitoClient = AWSCognitoIdentityProviderClientBuilder//
                .standard()//
                .withRegion(Regions.US_EAST_1)//
                .build();

        final Map<String, String> authParams = new HashMap<>();

        authParams.put("USERNAME", username);
        authParams.put("PASSWORD", password);
        authParams.put("SECRET_HASH", calculateSecretHash(username));

        final InitiateAuthRequest authRequest = new InitiateAuthRequest();

        authRequest//
                .withAuthFlow(AuthFlowType.USER_PASSWORD_AUTH)//
                .withClientId(CLIENT_ID)//
                .withAuthParameters(authParams);

        InitiateAuthResult result = cognitoClient//
                .initiateAuth(authRequest);

        System.out.println(result.getAuthenticationResult().getAccessToken());

}

private static String calculateSecretHash(String userName) throws Exception {

    SecretKeySpec signingKey = new SecretKeySpec( //
            CLIENT_SECRET.getBytes(StandardCharsets.UTF_8), //
            HmacAlgorithms.HMAC_SHA_256.toString());

        Mac mac = Mac.getInstance(HmacAlgorithms.HMAC_SHA_256.toString());
        mac.init(signingKey);
        mac.update(userName.getBytes(StandardCharsets.UTF_8));
        byte[] rawHmac = mac.doFinal(CLIENT_ID.getBytes(StandardCharsets.UTF_8));

        return Base64.encodeBase64String(rawHmac);

}

获取该令牌后,我希望创建Documentum的IDfSession,替代如下代码中的用户名密码,改用AWS令牌进行认证:

private static IDfSession getDfSession() throws DfException {
    IDfClient client = DfClient.getLocalClient();
    IDfSessionManager sessionMgr = client.newSessionManager();
    IDfLoginInfo login = new DfLoginInfo();
    login.setUser(USERNAME);
    login.setPassword(PASSWORD);
    login.setDomain(null);
    sessionMgr.setIdentity(DOCBASE, login);
    IDfSession session = sessionMgr.newSession(DOCBASE);
    return session;
}

请问此方案是否可行?是否需要先对令牌进行处理才能与Documentum仓库完成认证?另外我了解到OTDS支持跳转至AWS登录后返回已认证状态的功能。


解答

1. 直接用AWS令牌替换用户名密码的方案不可行

Documentum原生不支持直接识别AWS Cognito颁发的AccessToken,它的IDfLoginInfo默认只接受传统用户名/密码或自身认证体系兼容的凭证,直接传入AWS令牌无法完成身份校验。

2. 令牌需要通过OTDS做集成处理

想要用AWS身份凭证登录Documentum,必须借助OTDS(OpenText Directory Services)作为中间认证层:

  • OTDS支持OIDC/SAML协议,可与AWS Cognito配置为身份提供商(IdP)
  • 用户通过OTDS跳转至AWS完成认证后,OTDS会生成一个能被Documentum识别的会话凭证(比如Session Ticket)
  • 需使用这个OTDS凭证替代原代码中的用户名密码,而非直接使用AWS的AccessToken

3. OTDS跳转AWS登录的功能是可行的集成路径

这是标准的跨身份提供商集成方案,具体流程如下:

  • 配置OTDS作为OIDC客户端,对接AWS Cognito的身份服务端点
  • 用户访问Documentum应用时,引导至OTDS认证页面,OTDS自动跳转至AWS登录界面
  • AWS认证成功后回调至OTDS,OTDS生成Documentum兼容的会话凭证
  • 在代码中使用该会话凭证创建IDfSession,示例代码大致如下:
private static IDfSession getDfSessionWithOTDS(String otdsSessionTicket) throws DfException {
    IDfClient client = DfClient.getLocalClient();
    IDfSessionManager sessionMgr = client.newSessionManager();
    IDfLoginInfo login = new DfLoginInfo();
    // 设置OTDS域和会话凭证,具体参数需根据实际配置调整
    login.setUser("");
    login.setPassword(otdsSessionTicket);
    login.setDomain("YOUR_OTDS_DOMAIN");
    sessionMgr.setIdentity(DOCBASE, login);
    IDfSession session = sessionMgr.newSession(DOCBASE);
    return session;
}

注意:具体的OTDS配置和凭证传递方式需要根据你的OTDS版本、Documentum版本以及AWS Cognito的集成细节调整,部分场景下可能需要使用IDfSessionManager的authenticate方法传入OTDS认证上下文。


内容的提问来源于stack exchange,提问作者Alfredo Morales

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 10:02:36