1

証明キー バリデータは常に無効な証明キーを返します。

https://github.com/Microsoft/Office-Online-Test-Tools-and-Documentation/blob/master/samples/java/ProofKeyTester.javaを参照しています

@GET
@Path("/{file_id}")
@Produces(APPLICATION_JSON)
public Response checkFileInfo(@PathParam("file_id") String fileId, @QueryParam("access_token") String accessToken, @Context HttpHeaders httpHeaders, @Context HttpServletRequest request) {
    try {
        String proof = httpHeaders.getRequestHeader("X-WOPI-Proof") != null ? httpHeaders.getRequestHeader("X-WOPI-Proof").get(0) : null;
        String proofOld = httpHeaders.getRequestHeader("X-WOPI-ProofOld") != null ? httpHeaders.getRequestHeader("X-WOPI-ProofOld").get(0) : null;
        String wopiTimeStamp = httpHeaders.getRequestHeader("X-WOPI-TimeStamp") != null ? httpHeaders.getRequestHeader("X-WOPI-TimeStamp").get(0) : null;
        String urlSrc = request.getRequestURL().toString();
        String replacedStr = HTTP.matcher(urlSrc).replaceAll("https");
        validateProofKey(proof, proofOld, wopiTimeStamp, replacedStr, accessToken);

}

private void validateProofKey(String proof, String proofOld, String timeStamp, String urlSrc, String accessToken) throws Exception {
    LOGGER.info("verifying proof key");
    ProofKeyManager proofKeyManager = getBean(ProofKeyManager.class);
    String url = urlSrc + (urlSrc.contains(".wopitest") ? "?TESTCATEGORY=OFFICEONLINE&ACCESS_TOKEN=" : "?ACCESS_TOKEN=") + accessToken;
    byte[] expectedProof = proofKeyManager.getExpectedProofBytes(url, accessToken, timeStamp);
    WopiDiscovery wopiDiscovery = getBean(WopiDiscoveryProcessService.class).getWopiDiscoveryData();
    String modulus = wopiDiscovery.getProofKey().getModulus();
    String exponent = wopiDiscovery.getProofKey().getExponent();
    String oldModulus = wopiDiscovery.getProofKey().getOldmodulus();
    String oldExponent = wopiDiscovery.getProofKey().getOldexponent();
    boolean validScenario = proofKeyManager.verifyProofKey(modulus, exponent, proof, expectedProof);
    boolean validScenarioWithOld = proofKeyManager.verifyProofKey(modulus, exponent, proofOld, expectedProof);
    boolean oldPK = proofKeyManager.verifyProofKey(oldModulus, oldExponent, proof, expectedProof);
    if (proofKeyManager.verifyProofKey(modulus, exponent, proof, expectedProof) || proofKeyManager.verifyProofKey(modulus, exponent, proofOld, expectedProof) || proofKeyManager.verifyProofKey(oldModulus, oldExponent, proof, expectedProof)) {
        LOGGER.info("proof key is valid");
    } else {
        LOGGER.error("proof key is not valid");
        //throw new Exception("Invalid proof key");
    }

}

要求が Office Online によって生成された場合、"証明キーは有効です" というログが記録されます。ただし、有効な場合でも、「証明キーが無効です」とログに記録されます。

4

1 に答える 1