如何使用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
相关产品推荐
相关产品推荐

