お世話になっております。
掲題の件につきまして質問を行わせてください。
現在、Azure ADとのSAML連携をJAVA(struts2)で構築しており、
その中でAzure ADからのログアウト要求(SAMLRequest)を受けた際のSP側の署名検証でお伺いしたい事があります。
現状、署名をパラメータから取得を行い、Signature(java.security.Signature)クラスで検証を行っていますが、
常にfalseとなってしまっている状態です。
※公開鍵が正しくメタデータから取得できていることはログイン時のテストで確認済み
Signatureクラスでupdateを行う際はクエリストリングのバイトを設定していますが、
こちらで合っていますでしょうか?
検証時の過去事例や解決策等ございましたらご教授頂けると幸いです。
String paramSignature = request.getParameter("Signature");String paramSigAlg = request.getParameter("SigAlg");String relayState = request.getParameter("RelayState");String query ="SAMLRequest"+"="+URLEncoder.encode(encodedMessage, UTF8);
query += relayState ==null?"":"&RelayState="+URLEncoder.encode(relayState, UTF8);
query +="&SigAlg="+URLEncoder.encode(paramSigAlg, UTF8);
org.apache.xml.security.Init.init();
java.security.Signature sig = java.security.Signature.getInstance("SHA256withRSA");
sig.initVerify(cre.getPublicKey());
sig.update(query.getBytes());
result = sig.verify(signatureBytes);