C# relies on Web services for ADUCID - or WSA, see Server side integration basics
Import WSDL into your project in Visual Studio.
Create an instance of AducidApiJsonServiceClient.
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<AducidClientException>().result;
//get error as JSON
var response = aducid.toErrorJson(errorResult, "error");
//send JSON to Web API
context.Response.Write(response);
}
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<AducidClientException>().result;
//get error as JSON
var response = aducid.toErrorJson(errorResult, "error");
//send JSON to Web API
context.Response.Write(response);
}
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<AducidClientException>().result;
//get error as JSON
var response = aducid.toErrorJson(errorResult, "error");
//send JSON to Web API
context.Response.Write(response);
}
This page should contain Client API for Web Integration
Provide start, check and proxy Url.
Override what should be done after authentication / operation:
<script type="text/javascript">
var aducid = new ADUCID();
$(document).ready(function () {
aducid.setAuthentication();
//operation start URL
aducid.setStartOperationUrl("open");
//operation check URL
aducid.setResultOperationUrl("openCheck");
//proxy helper URL
aducid.setProxyUrl("proxy");
//text under QR code
aducid.showQRHint = function (param) {
$('#qr-code-hint').html("Use your PEIG to authenticate");
}
//running operation texr
aducid.showRunningHint = function (param) {
$('#qr-code-hint').html("Please wait ...");
}
//called when auth finished (except iOS)
aducid.processResult = function (result) {
alert("Auth finished. Result: " + JSON.stringify(result));
if (result.status == "OK") {
location.href = result.redirect;
}
else {
location.href = result.redirect;
}
}
//handle PEIG not installed error
aducid.showPeigError = function () {
showDialog("Problem with PEIG", "PEIG is not installed", "error", function () {
location.reload();
});
}
//handle communication or other error
aducid.handleError = function (result) {
showDialog("General error", result.data.message, "error", function () {
location.href = result.redirect;
});
}
//GUI mapping
//button associated to start auth
aducid.setButton($("#main-button"));
//locatino of QR code img
aducid.setQrCode($("#qr-code"));
//location of text under QR code
aducid.setQrHint($("#qr-code-hint"));
//start; false as we wait for button click or qr scan
aducid.init(false);
});
</script>
And create some HTML elements:
<div class="container">
<h1>ADUCID Hello World example</h1>
<div class="row">
<div class="col-xs-8 col-xs-offset-2">
<div class="row">
<div class="col-xs-8 col-xs-offset-2">
<div id="main-button" class="btn btn-primary btn-lg center-block">Authenticate</div>
</div>
</div>
<div class="row">
<img id="qr-code" alt="" class="img-responsive center-block" />
</div>
<div class="row text-center">
<div id="qr-code-timer" class="qr-code-timer img-responsive center-block"></div>
<div id="qr-code-hint" class="qr-code-hint"></div>
</div>
<div id="peig-error" style="display: none;">
<h2>PEIG Error</h2>
<a class='btn btn-lg' href='http://www.aducid.com/support/' data-lang="aducid_common_installPeig">Install PEIG</a>
<br />
<div class='btn btn-lg' onclick="location.reload()" data-lang="aducid_common_tryAgain">Try again</div>
</div>
</div>
</div>
</div>