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

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
study:java:sharepointonline:implement1 [2021/07/15 09:45] – [Main class code] bananastudy:java:sharepointonline:implement1 [2021/07/16 00:04] (現在) – [Main class code] banana
行 1: 行 1:
 ====== SAML Security token 取得の実装 ====== ====== SAML Security token 取得の実装 ======
 ここでは、[[study:java:sharepointonline:poc|POC of consuming Sharepoint online]]のPOC段階2について、Javaの実装例を紹介します。 ここでは、[[study:java:sharepointonline:poc|POC of consuming Sharepoint online]]のPOC段階2について、Javaの実装例を紹介します。
 +{{keywords>Get SAML Security token from Sharepoint online}}
 ===== 動作環境について ===== ===== 動作環境について =====
 テスト環境についてですが、Java7(IBM J9 VM (build 2.6, JRE 1.7.0 Windows 7 amd64-64 Compressed References 20150701_255667 (JIT enabled, AOT enabled))で、テストを行いました。\\ テスト環境についてですが、Java7(IBM J9 VM (build 2.6, JRE 1.7.0 Windows 7 amd64-64 Compressed References 20150701_255667 (JIT enabled, AOT enabled))で、テストを行いました。\\
行 61: 行 61:
       .body(buildSamlSecurityRequestEnvelope()); ★Point1       .body(buildSamlSecurityRequestEnvelope()); ★Point1
       RestTemplate _restTemplate = new RestTemplate();       RestTemplate _restTemplate = new RestTemplate();
-      _restTemplate.setRequestFactory(buildHttpComponentsClientHttpRequestFactory());+      _restTemplate.setRequestFactory(buildHttpComponentsClientHttpRequestFactory()); ★Point2
  
       ResponseEntity<String> _responseEntity = _restTemplate.exchange(_requestEntity, String.class);       ResponseEntity<String> _responseEntity = _restTemplate.exchange(_requestEntity, String.class);
行 70: 行 70:
  
       Document _definitionDocument = (Document) _result.getNode();       Document _definitionDocument = (Document) _result.getNode();
-      final String XPATH_EXPRESSION = "//t:RequestedSecurityToken/*";+      final String XPATH_EXPRESSION = "//t:RequestedSecurityToken/*";   ★Point3
       Node _tokenNode = getXPathExpression(XPATH_EXPRESSION).evaluateAsNode(_definitionDocument);       Node _tokenNode = getXPathExpression(XPATH_EXPRESSION).evaluateAsNode(_definitionDocument);
-      _token = nodeToXmlString(_tokenNode);+      _token = nodeToXmlString(_tokenNode);   ★Point4
  
       if ("".equals(_token)) {       if ("".equals(_token)) {
行 132: 行 132:
 </code> </code>
  
 +★Point2\\
 +HttpComponentsClientHttpRequestFactoryを作成する部分です。\\
 +ごく一般的設定になりますが、ポイントとしてUser-Agentの指定です。((User-Agentを指定する理由は、SharePointサイトからの調整を回避するためです。詳細は[[https://docs.microsoft.com/ja-jp/sharepoint/dev/general-development/how-to-avoid-getting-throttled-or-blocked-in-sharepoint-online#how-to-decorate-your-http-traffic-to-avoid-throttling|調整を回避するために、http トラフィックを装飾する方法]]を参照してください。))\\
 +コードの一部分を以下に示します。
 +<code java>
 +public class HttpComponentsClientHttpRequestFactoryBuilder {
 +  public static HttpComponentsClientHttpRequestFactory build() {
 +    final int TIMEOUT = 5;
 +    //create connection manager
 +    PoolingHttpClientConnectionManager _cm = new PoolingHttpClientConnectionManager();
 +    _cm.setMaxTotal(128); //default 20
 +    _cm.setDefaultMaxPerRoute(24); //default 2
 +
 +    //request configuration
 +    RequestConfig _requestConfig = RequestConfig.custom()
 + .setConnectTimeout(TIMEOUT * 1000)
 + .setConnectionRequestTimeout(TIMEOUT * 1000)
 +        .setSocketTimeout(TIMEOUT * 1000)
 + .build();
 +
 +    //create HttpClient
 +    HttpClientBuilder _builder = HttpClientBuilder.create()
 + .setUserAgent("NONISV|Contoso|Sharepoint-demo/1.0")
 + .setConnectionManager(_cm)
 + .setDefaultRequestConfig(_requestConfig);
 +
 +    HttpComponentsClientHttpRequestFactory _factory = new HttpComponentsClientHttpRequestFactory(_builder.build());
 +
 +    return _factory;
 +  }
 +
 +}
 +</code>
 +
 +★Point3\\
 +SAML:Assertionを取り出す部分です。 ResponseのXMLから<t:RequestedSecurityToken>elementをXPathを利用して取り出します。\\
 +elementがnamespaceのものならXPathExpression生成時、namespaceを渡す必要があります。\\
 +
 +★Point4\\
 +取り出したSAML:Assertionは、Node(Pretty-type)です。POCでも触れましたが、Binary tokenを取得する際、渡すSAML:Assertionはraw-typeです。\\
 +そのため、ここでNodeをStringに変換しています。
 +
 +~~DISCUSSION~~
  
  

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