Sammensetting av request
Alle forespørseler mot IPS settes sammen over samme struktur. Rot elementet består alltid at to elementer; forespørselsdata og brukersteds signatur over disse dataene:
(eksempel for identifisering:)
/IdentityRequest /IdentityRequestData /Signature
Elementet [operasjon]RequestData er basert på typen requestHeaderType. Denne inneholder et sett med standard elementer som skal eller kan være med i alle forespørsler:
- Unik identifikator for forespørselen (RequestId)
- Retur URL ved endt forespørsel ved redirect basert operasjoner (ResponseUrl)
- Et sett med ønskede instrumenter for identifisering (InstrumentAttribute)
Kode eksempel (java, satt sammen java støttebiblioteker):
// build request data BxElement ird = new BxElement("IdentityRequestData"); ird.addElement("RequestId", BxCrypto.generateUid()); ird.addElement("ResponseUrl", "http://myhost.com/login.jsp"); // build request, add missing header data, sign and encrypt BxRequest req = new BxRequest("IdentityRequest", ird, true); // get the form data String pse = req.getPSE(); String e = req.getE(); // put the request object on session request.getSession().setAttribute("_idrequest_", req);
Deretter genereres HTML'en:
<html> <body onload="javascript:document.getElementById('id').submit()"> <form id="id" action="https://secure.test4.buypass.no/wips/service" method="POST"> <input type="hidden" name="PSE" value="<%=pse%>"> <input type="hidden" name="E" value="<%=e%>"> <input type="hidden" name="M" value="512"> <input type="hidden" name="op" value="BxID"> </form> </body> </html>
Dette vil sørge for at parameterne sendes til IPS, og identifisering vil starte.
Tolking av responser fra IPS
BxRequest objektet lagres på sesjonen som i eksempelet over. Dette request objektet er nødvendig for å kunne dekryptere og parse responsedataene som kommer i parametere PE når identifisering er ferdig:
<html> <body> <% // parse response data BxResponse res = new BxResponse( request.getParameter("PE")); // assign request object to response res.setRequestContext((BxRequest)request.getSession(). getAttribute("_idrequest_")); // decode, decrypt and parse request res.parse();
I eksempelet over har parameteren PE blitt mottatt i siden angitt i ResponseUrl (login.jsp). Deretter har BxRequest objektet blitt hentet ut fra sesjonen og brukt for dekryptering og parsing av PE parameteren. Etter parse() kallet er ferdig, er responsdataene tilgjengelige for lesing:
// get id response object from response BxElement idResponseData = res.getElement("IdentityResponseData"); // get the id token BxElement idTokenData = null; BxElement idToken = idResponseData.getElement("IdToken"); if(idToken != null){ idTokenData = idToken.getElement("IdTokenData"); }
Innholdet i IdToken'et er nå lest ut og kan tolkes videre:
// get response status String status = idResponseData.getElement("ResponseCode").getValue(); // check status and dump response if(status != null && status.equalsIgnoreCase("ips:SUCCESS")){ // put IdToken on session request.getSession().setAttribute("IdToken", idToken); %> FirstName: <%=idTokenData.getElement("FirstName").getValue()%><br> LastName: <%=idTokenData.getElement("LastName").getValue()%><br> <% } else { %><h1>Error: <%=status%></h1><% } %> </body> </html>