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


Binary token取得の実装

本稿では、SAML Security token 取得の実装に続き、Binary token取得処理の実装について、紹介します。

Mainコード

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

private static final ResourceBundle RSC = ResourceBundle.getBundle("com.app.sample.ws.application");
private static final String CUSTOM_STS_ENDPOINT = "https://login.microsoftonline.com/extSTS.srf";
 
private Map<String, String> namespacePrefixes = new HashMap<String, String>();
static {
  //register the prefix of NameSpace
  namespacePrefixes.put("wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
}
 
public String receiveBinarySecurityToken(String samlAssertion) {
  String _token = "";
  try {
    //request entity
    RequestEntity<String> _requestEntity = RequestEntity
	.post(new URI(CUSTOM_STS_ENDPOINT))
	.header("content-type", "application/soap+xml; charset=utf-8")
	.body(buildBinaryTokenRequestEnvelope(samlAssertion));
 
    RestTemplate _restTemplate = new RestTemplate();
    _restTemplate.setRequestFactory(buildProxyClientHttpRequestFactory());
 
    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 = "//wsse:BinarySecurityToken";
    _token = getXPathExpression(XPATH_EXPRESSION).evaluateAsString(_definitionDocument);
 
    if ("".equals(_token)) {
	logger.error("Unable to authenticate: empty token");
    }
 
  } catch (Exception e) {
    logger.error("failed to receive binary security token", e);
  }
 
  return _token;
}//receiveBinarySecurityToken
 
private String buildBinaryTokenRequestEnvelope(String samlAssertion) {
  //SAML Assertion mapping
  Map<String, String> _mapRequest = new HashMap<String, String>();
  _mapRequest.put("samltoken", samlAssertion);
  //replace placeHolder
  StringSubstitutor _substitutor = new StringSubstitutor(_mapRequest, "%(", ")");
  String _finalXMLRequest = _substitutor.replace(RSC.getString("soap.binary.token.request"));
 
  return _finalXMLRequest;
}//buildBinaryTokenRequestEnvelope
 
private HttpComponentsClientHttpRequestFactory buildProxyClientHttpRequestFactory() throws Exception {
  return ProxyClientHttpRequestFactoryBuilder.build());
}
 
private XPathExpression getXPathExpression(String expression) {
  XPathExpression _xPathExpressioin = XPathExpressionFactory.createXPathExpression(expression, namespacePrefixes);
  return _xPathExpressioin;
}

コメント

コメントを入力. Wiki文法が有効です:
D M P W Y
 

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