Writing /volume1/Web/Public/dokuwiki/data/log/deprecated/2024-11-15.log failed

文書の過去の版を表示しています。


Writing /volume1/Web/Public/dokuwiki/data/log/deprecated/2024-11-15.log failed

SAML Security token 取得の実装

ここでは、POC of consuming Sharepoint onlineのPOC段階2について、Javaの実装例を紹介します。

動作環境について

テスト環境についてですが、Java7(IBM J9 VM (build 2.6, JRE 1.7.0 Windows 7 amd64-64 Compressed References 20150701_255667 (JIT enabled, AOT enabled))で、テストを行いました。
ビルドには、Mavenを使用しました。
必要なlibrary dependencyを以下に示します。

  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>4.3.25.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-text</artifactId>
    <version>1.3</version>
  </dependency>
  <dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
  </dependency>
  <dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20210307</version>
  </dependency>
  <dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bctls-fips</artifactId>
    <version>1.0.12.1</version>
    <scope>provided</scope>
  </dependency>

httpclientとして、apacheのhttpclientを使用していますが、Okhttpを使っても構いません。
また、RestTemplateを使用するため、spring-webを導入しています。
特に注目して欲しい のは、boucycastleライブラリです。bouncycastleライブラリを導入する理由については、Binary token取得のjava実装編で紹介します。

Main class code

実装のメインになるコードを以下に示します。

  private static final ResourceBundle RSC = ResourceBundle.getBundle("com.app.sample.ws.application");
  private static final String STS_AUTH_ENDPOINT = "https://xxxxx.contoso.com/adfs/services/trust/2005/usernamemixed";
 
  private Map<String, String> namespacePrefixes = new HashMap<String, String>();
 
  static {
    //register the prefix of NameSpace
    namespacePrefixes.put("t", "http://schemas.xmlsoap.org/ws/2005/02/trust");
  }
 
  public String receiveSamlSecurityToken() {
    String _token = "";
    try {
      //request entity
      RequestEntity<String> _requestEntity = RequestEntity
	     .post(new URI(STS_AUTH_ENDPOINT))
	     .header("content-type", "application/soap+xml; charset=utf-8")
	     .body(buildSamlSecurityRequestEnvelope());
      RestTemplate _restTemplate = new RestTemplate();
      _restTemplate.setRequestFactory(buildHttpComponentsClientHttpRequestFactory());
 
      ResponseEntity<String> _responseEntity = _restTemplate.exchange(_requestEntity, String.class);
      DOMResult _result = new DOMResult();
 
      Transformer _transformer = TransformerFactory.newInstance().newTransformer();
      _transformer.transform(new StringSource(_responseEntity.getBody()), _result);
 
      Document _definitionDocument = (Document) _result.getNode();
      final String XPATH_EXPRESSION = "//t:RequestedSecurityToken/*";
      Node _tokenNode = getXPathExpression(XPATH_EXPRESSION).evaluateAsNode(_definitionDocument);
      _token = nodeToXmlString(_tokenNode);
 
      if ("".equals(_token)) {
        logger.error("Unable to authenticate: empty token");
      }
 
    } catch (Exception e) {
      logger.error("failed to receive SAML security token", e);
    }
    return _token;
  }//receiveSamlSecurityToken
 
 

コメント

コメントを入力. Wiki文法が有効です:
Q Z X᠎ F Y
 

QR Code
QR Code study:java:sharepointonline:implement1 (generated for current page)