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>