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>