====== 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