差分

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

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
study:java:sharepointonline:implement3 [2021/07/19 09:08] – [Binary token取得の実装] bananastudy:java:sharepointonline:implement3 [2025/02/03 09:17] (現在) banana
行 5: 行 5:
 {{keywords>Get Binary token Sharepoint online}} {{keywords>Get Binary token Sharepoint online}}
  
-===== Mainコード =====+====== Mainコード ======
 実装コードのメインとなる部分を以下に示します。 実装コードのメインとなる部分を以下に示します。
 <code java> <code java>
行 50: 行 50:
 }//receiveBinarySecurityToken }//receiveBinarySecurityToken
  
 +//build Binary token request envelope
 private String buildBinaryTokenRequestEnvelope(String samlAssertion) { private String buildBinaryTokenRequestEnvelope(String samlAssertion) {
   //SAML Assertion mapping   //SAML Assertion mapping
行 62: 行 63:
 }//buildBinaryTokenRequestEnvelope }//buildBinaryTokenRequestEnvelope
  
 +//build HttpComponentsClientHttpRequestFactory for PROXY connection
 private HttpComponentsClientHttpRequestFactory buildProxyClientHttpRequestFactory() throws Exception { private HttpComponentsClientHttpRequestFactory buildProxyClientHttpRequestFactory() throws Exception {
   return ProxyClientHttpRequestFactoryBuilder.build());   return ProxyClientHttpRequestFactoryBuilder.build());
 } }
  
 +//create XPathExpression
 private XPathExpression getXPathExpression(String expression) { private XPathExpression getXPathExpression(String expression) {
   XPathExpression _xPathExpressioin = XPathExpressionFactory.createXPathExpression(expression, namespacePrefixes);   XPathExpression _xPathExpressioin = XPathExpressionFactory.createXPathExpression(expression, namespacePrefixes);
行 83: 行 86:
 </code> </code>
  
 +★ポイント2\\
 +ここからの処理は外部サイトにアクセスするので、Proxy環境にある場合はProxy設定と、Https通信設定が必要です。\\
 +詳細は次節を参照してください。
 +
 +★ポイント3\\
 +レスポンスXMLから、XPathを利用してBinary tokenを抽出します。\\
 +wsse:BinarySecurityToken項目がnamespaceのものなので、XPathExpression生成時namespaceを渡す必要があります。
 +
 +====== ProxyClientHttpRequestFactoryBuilderクラス ======
 +ProxyClientHttpRequestFactoryBuilderクラスのコードを以下に示します。
 +<code java>
 +public class ProxyClientHttpRequestFactoryBuilder {
 +  private static final String PROXY_HOST = "proxy.sample.com";
 +  private static final int PROXY_PORT = 8080;
 +
 +  public static HttpComponentsClientHttpRequestFactory build() throws Exception {
 +    HttpHost _proxy = new HttpHost(PROXY_HOST, PROXY_PORT );
 +
 +    final int TIMEOUT = 5;
 +
 +    //request configuration
 +    RequestConfig _reqConfig = RequestConfig.custom()
 + .setConnectTimeout(TIMEOUT * 1000)
 +        .setSocketTimeout(TIMEOUT * 1000)
 + .setConnectionRequestTimeout(TIMEOUT * 1000)
 + .setProxy(_proxy)   ★ポイント1
 + .build();
 +
 +    BouncyCastleFipsProviderHelper.setUpProvider();   ★ポイント2
 +
 +    //setup SSLContext(BouncyCastle provider)
 +    SSLContext _sslContext = SSLContexts.custom()
 + .setProvider(new BouncyCastleJsseProvider(true))   ★ポイント3
 + .build();
 +
 +    SSLConnectionSocketFactory _sslSocketFactory = new SSLConnectionSocketFactory(_sslContext,
 + new String[]{"TLSv1.2"},
 + new String[]{"SSL_ECDHE_RSA_WITH_AES_128_CBC_SHA", "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",    ★ポイント4
 + "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256"}, //key length=128制限があるため
 + new DefaultHostnameVerifier());
 +
 +    Registry<ConnectionSocketFactory> _socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
 + .register("http", PlainConnectionSocketFactory.getSocketFactory())
 + .register("https", _sslSocketFactory)
 + .build();
 +
 +    PoolingHttpClientConnectionManager _cm = new PoolingHttpClientConnectionManager(_socketFactoryRegistry);
 + _cm.setMaxTotal(200);
 + _cm.setDefaultMaxPerRoute(100);
 +
 +    //create HttpClient
 +    HttpClient _client = HttpClientBuilder.create()
 + .setUserAgent("NONISV|Nskcom|Sharepoint-demo/1.0") //NONISV|CompanyName|AppName/Version
 + .setConnectionManager(_cm)
 + .disableRedirectHandling()
 + .setDefaultRequestConfig(_reqConfig)
 + .build();
 +
 +    HttpComponentsClientHttpRequestFactory _factory = new HttpComponentsClientHttpRequestFactory(_client);
 +
 +    return _factory;
 +  }//build
 +
 +}
 +</code>
 +
 +★ポイント1
 +HTTP Proxyを設定する部分です。ID/Password認証は必要ありません。
 +
 +★ポイント2
 +Bouncy CastleプロバイダーをSecurity Providerとして登録する部分です。\\
 +詳細については、[[study:java:sharepointonline:implement2|3rd Party Security Providerの導入について]]を参照してください。
 +
 +★ポイント3
 +FIPSモードとしてBouncy castleプロバイダーを設定します。
 +
 +★ポイント4
 +Cipher Suiteを指定します。 Java 7環境では、key size制限(128)があるため、Sharepointサイト要求のCipher Suiteから128lengthのみを選択します。\\
 +この指定がないと、「java.security.InvalidKeyException: Illegal key size」エラーが発生します。
 +
 +~~DISCUSSION~~

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