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

使用SAP Cloud SDK获取SSO类型BTP Destination报错的解决咨询

问题:BTP OAuth2SAMLBearerAssertion类型Destination在Java调用时报错的解决方法

问题背景

调用DestinationAccessor.getDestination("dest_test").asHttp()获取BTP中配置的OAuth2SAMLBearerAssertion类型Destination时,抛出DestinationAccessException。添加SystemUser属性后可正常获取,但该属性不适用于SSO场景,需解决SSO类型Destination的调用问题。

配置信息

BTP Destination配置

Name: dest_test 
Type: HTTP 
URL:  https://api10.successfactors.com:443 
Proxy Type: Internet 
Authentication: OAuth2SAMLBearerAssertion 
Audience: www.successfactors.com 
AuthnContextClassRef: urn:oasis:names:tc:SAML:2.0:ac:classes:PreviousSession 
Token Service URL: https://api10.successfactors.com:443/oauth/token 
HTML5.DynamicDestination: true 
nameIdFormat: urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified 
product.name: SAP SuccessFactors 
WebIDEEnabled: true 
WebIDEUsage: odata_gen 
Client Key:   XXX(Customer sensitive information) 
apiKey:       XXX(Customer sensitive information) 
companyId:    XXX(Customer sensitive information) 
XFSystemName: XXX(Customer sensitive information)

技术环境

  • Java版本:JavaSE-1.8
  • 依赖配置(pom.xml):
<dependency>
    <groupId>com.sap.cloud.sdk.cloudplatform</groupId>
    <artifactId>scp-cf</artifactId>
    <version>3.58.0</version>
</dependency>

报错信息

Caused by:com.sap.cloud.sdk.cloudplatform.connectivity.exception.DestinationAccessException: Failed to get destination with name 'dest_test'.

解决方案

针对OAuth2SAMLBearerAssertion类型的SSO Destination,需确保以下配置和代码调整:

1. 补充Destination的SSO必要属性

确保BTP Destination中配置以下关键属性(缺失则添加):

  • user.token.service.url:复用现有Token Service URL的值
  • saml2.audience:与Audience属性值保持一致(即www.successfactors.com)
  • clientid:填写Client Key对应的内容(注意属性名为小写clientid)
  • identityzone:BTP子账户的身份区域ID,可从子账户详情页获取

2. 基于用户上下文获取Destination

SSO场景需依托当前登录用户的上下文获取Destination,调整代码如下:

// 确保当前线程存在用户上下文(可通过RequestContext或AuthToken获取)
HttpDestination destination = DestinationAccessor.getDestination("dest_test")
    .decorate(DefaultOAuth2TokenFacade::new)
    .asHttp();

或使用RequestContext包装调用逻辑:

try( final RequestContext requestContext = RequestContextExecutor.create().withAuthToken(authToken).execute() ) {
    HttpDestination destination = DestinationAccessor.getDestination("dest_test").asHttp();
    // 后续业务调用逻辑
}

3. 检查SDK版本与应用权限

  • 确认scp-cf依赖版本(3.58.0)支持OAuth2SAMLBearerAssertion类型的SSO Destination,若存在兼容性问题可尝试升级至最新稳定版
  • 确保BTP应用拥有destination服务的访问权限,在manifest.yml中配置:
services:
  - name: 你的destination服务实例名

并在BTP子账户中为应用分配该服务实例的权限

4. 验证SAML断言配置匹配度

确保Destination的SAML相关属性与SuccessFactors要求匹配,可尝试调整:

  • 将AuthnContextClassRef改为urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
  • 将nameIdFormat改为urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress(需与用户登录邮箱一致)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 23:44:56