====== C# Example ====== C# relies on Web services for ADUCID - or WSA, see [[web-integration:basics|Server side integration basics]] Import WSDL into your project in Visual Studio. Create an instance of **AducidApiJsonServiceClient**. === Create a start operation Url === This page starts authentication request. System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12; context.Response.ContentType = "application/json"; var aducid = new AducidApiServiceClient(); //get current URI string host = "http://" + HttpContext.Current.Request.Url.Host + ":" + HttpContext.Current.Request.Url.Port; string query = context.Request.QueryString.ToString(); var queryParsed = HttpUtility.ParseQueryString(query); //should we display QR? var generateQr = queryParsed["generateQrCodePicture"]; //create argument var arg = new requestOperationArguments(); //final URL for iOS arg.peigReturnName = host + "/authenticated"; arg.qrCodePictureHeight = 300; arg.qrCodePictureWidth = 300; //ID to support multiple authentications in the same browser arg.id = Guid.NewGuid().ToString(); arg.generateQrCodePicture = generateQr == "true"; try { //inititialize authentication and get response var response = aducid.startAuthenticationSession(arg); //store authId in session - security context.Session[arg.id] = response.authId; context.Response.ContentType = "application/json"; //send repsponse to Web API context.Response.Write(aducid.toJson(response, "")); } catch (System.ServiceModel.FaultException e) { //handle error var msgFault = e.CreateMessageFault(); var errorResult = msgFault.GetDetail().result; //get error as JSON var response = aducid.toErrorJson(errorResult, "error"); //send JSON to Web API context.Response.Write(response); } === Create WSA proxy === Just simple "Rewrite" from WSA to C# with authId check //We have to "proxy" AIM reponses to Web APIuising this page var aducid = new AducidApiServiceClient(); context.Response.ContentType = "application/json"; try { string query = context.Request.QueryString.ToString(); var queryParsed = HttpUtility.ParseQueryString(query); //get id from session based on GUID var id = queryParsed["id"]; //get response from AIM var response = aducid.getStatus((string)context.Session[id]); //send response to Web API context.Response.Write(aducid.toJson(response, "")); } catch (System.ServiceModel.FaultException e) { //handle error var msgFault = e.CreateMessageFault(); var errorResult = msgFault.GetDetail().result; //get error as JSON var response = aducid.toErrorJson(errorResult, "error"); //send JSON to Web API context.Response.Write(response); } === Create check Url === On the result page we evaluate the authentication There are two basic results – authentication is OK or an error is thrown: var aducid = new AducidApiServiceClient(); string query = context.Request.QueryString.ToString(); var queryParsed = HttpUtility.ParseQueryString(query); var id = queryParsed["id"]; //get authId from session string authId = (string)context.Session[id]; context.Response.ContentType = "application/json"; try { //call AIM to get operation result var aducidResult = aducid.getResult(authId, null); //User Database Index, i.e. UDI var udi = aducidResult.userDatabaseIndex; //authKey (with authId) used to access user data later from AIM var authKey2 = aducidResult.authKey; //finalize authentication and get respoonse form Web API var response = aducid.endAuthenticationSession(authId, authKey2); //AUTHENTICATED FormsAuthentication.SetAuthCookie("auth", false); //send Web API the result - by default it will redirect to URI we provided earlier; for iOS PEIG opens this URI directly context.Response.Write(aducid.toJson(response, "authenticated")); } catch (System.ServiceModel.FaultException e) { //handle error var msgFault = e.CreateMessageFault(); var errorResult = msgFault.GetDetail().result; //get error as JSON var response = aducid.toErrorJson(errorResult, "error"); //send JSON to Web API context.Response.Write(response); } === Prepare a web page === This page should contain [[web-integration:client-side|Client API for Web Integration]]\\ Provide start, check and proxy Url. Override what should be done after authentication / operation: And create some HTML elements:

ADUCID Hello World example

Authenticate