2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SAP Cloud SDKを使った開発

Posted at

この記事は chillSAP 夏の自由研究2022 8/8の記事として執筆しています

はじめに

SAP BTP上でUI5のApplicationを作成時、DBへの登録処理等でサーバサイドのアプリケーションの開発も必要になることが多いかと思います。特にJavaのアプリケーションを開発する際に便利なSAP Cloud SDK等、Javaのライブラリについて一部紹介させていただきます。

ログインユーザの情報を取得

IAS(Identity Authentication Service) でユーザ管理をし、IAS上で管理されているユーザID、メールアドレス、従業員番号等を
サーバサイドのJavaアプリケーションで取得する場合に、com.sap.cloud.security.xsuaaのライブラリを使用し、Tokenから情報を取得することができます。

pom.xmlへの記載例

<dependency>
    <groupId>com.sap.cloud.security.xsuaa</groupId>
    <artifactId>xsuaa-spring-boot-starter</artifactId>
    <version>2.13.0</version>
</dependency>

で対象のライブラリを読み込むことで使用が可能

WebSecurityConfigurerAdapterを拡張したクラスを作成し、xs-security.jsonと合わせてAPI単位に権限を設定することも可能

WebSecurityConfigurerAdapterの拡張例

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    
    @Autowired
    XsuaaServiceConfiguration xsuaaServiceConfiguration;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // @formatter:off
        http
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
        .and()
            .authorizeRequests()
            .antMatchers("/hello-token/**").hasAuthority("Read") // checks whether it has scope "<xsappId>.Read"
            .antMatchers("/actuator/**").authenticated()
            .anyRequest().denyAll()
        .and()
            .oauth2ResourceServer()
            .jwt()
            .jwtAuthenticationConverter(getJwtAuthoritiesConverter());
        // @formatter:on
    }

    Converter<Jwt, AbstractAuthenticationToken> getJwtAuthoritiesConverter() {
        TokenAuthenticationConverter converter = new TokenAuthenticationConverter(xsuaaServiceConfiguration);
        converter.setLocalScopeAsAuthorities(true); // not applicable in case of multiple xsuaa bindings!
        return converter;
    }

}

従業員番号等、拡張属性については

  • IASの設定画面でSAML Assertion Attributesで追加
  • xs-security.jsonにattributesの追加
  • SAP BTPのApplicationのSecurity設定にAttributesを追加

の手順を踏むことにより、Javaのアプリケーションで拡張属性を取得することができます。
※Tokenからメールアドレス等の取得メソッドは用意されていますが、拡張属性は
getXSUserAttributeで取得の必要があります。

Tokenより取得例

@GetMapping("/v1/api/UserInfo")
    public ResponseEntity<UserInfo> responseEntity(@AuthenticationPrincipal Token token) throws TokenFlowException {
                
       UserInfo res = new UserInfo();
        res.setLogonName(token.getLogonName());
        res.setGivenName(token.getGivenName());
        res.setFamilyName(token.getFamilyName());
        res.setEmail(token.getEmail());
        res.setOrigin(token.getOrigin());
        String[] employeeNumber = token.getXSUserAttribute("EmployeeNum");
        return new ResponseEntity<>(res, HttpStatus.OK);
    }

参考サイト
https://github.com/SAP/cloud-security-xsuaa-integration
https://qiita.com/tami/items/77f8cad68cfd6975c9c0
https://blogs.sap.com/2020/07/24/mapping-of-saml-attributes-with-xsuaa-jwt-in-cloud-foundry/

javaからdestinationに設定したURLへの呼び出し

UI5等のフロント側からdestinationに設定したoDataサービス等を呼び出すことは多いので、サンプルコード等は良く目にしますが、今回はサーバサイドのアプリケーションからdestinationに設定したoDataサービス等を呼び出す方法を紹介します。
事例として、SuccessFactorsに保持したデータをバッチ処理でHANA DBへインポート処理や、バックエンドでFormsByAdobeを用いたPDF生成に使いました。

利点

  • 認証設定のID/PWをJavaの設定に保持する必要がなくなる
  • 認証処理をdestinationに任せることができる
  • SAP SuccessFactors Extensibility作成時に自動的に作成されたdestinationを使用可能

pom.xmlへの記載例

    <dependency>
        <groupId>com.sap.cloud.sdk.cloudplatform</groupId>
        <artifactId>scp-cf</artifactId>
        <version>3.40.0</version>
    </dependency>

Javaのコード例

DestinationLoader destinationLoader = new ScpCfDestinationLoader(Duration.ofSeconds(10));
HttpDestination destination = destinationLoader.tryGetDestination("hoge").get().asHttp(); 
HttpGet getRequest = new HttpGet(destination.getUri().toString() + "v1/forms/" + formTemplate);
HttpResponse httpResponse = httpClient.execute(getRequest);
        

その他

その他にもAlertNotificationServiceへ簡単にアクセスするライブラリや、Application Logging Serviceで表示されるLogViewerのlevelやlogger、msg等もきれいに出すためのライブラリも存在します。
他にも、SAP Cloud SDKの中には多くの機能が存在します。要件に直接必要な機能でないかもしれませんが、UATを始めとするテストフェーズでこれらのライブラリを導入することにより、不具合のトレースがしやすくなります。

終わりに

今回はchillSAP 夏の自由研究2022ということでライブラリの紹介を載せましたが、使い方の詳細などはまた詳しく投稿していきたいと思います。

参考サイト
https://sap.github.io/cloud-sdk/docs/overview/getting-started

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?