<%@language = "javascript" %> <% /* $Revision$ $Id$ File: getapptoken.asp Description: Vraag een nieuw token op voor een bepaalde App Parameters: Context: Note: Enigszins conform oAuth/ OpenID Connect maar daar (nog) niet noodzakelijkerwijs compatible mee. */ var JSON_Result = true; %> <% Session.Codepage = 65001; // We doen *uitsluitend* utf-8 Response.Charset = 'utf-8'; var client_id = getQParam("client_id"); var device_id = getQParam("device_id", "AUTO_" + shared.random(32)); // optional device identification // Hetzelfde device krijgt altijd hetzelfde token terug var device_name = getQParam("device_name", ""); // Friendly name naar de gebruiker toe var push_token = getQParam("push_token", ""); var model_client = new model_aut_client({ internal: true }); var client_data = api2.GET(model_client, { filter: { "code": client_id } }); // sp moet er dan zijn voor Service Provider if (!client_data && client_id == "FCLTAPP1") // Voor FCLTAPP1 ondersteunen we auto-create { var client_data = { "code": client_id, "name": "New Nexus app", "type": { "id": 4, "name": "JWT sso" }, "remark": "Automatisch aangemaakt voor New Nexus app", "secret": shared.random(32), "audience": "{0}.facilitor.nl".format(customerId.toLowerCase()), "issuer": "FACILITOR FCLTAPP1", "algorithm": "HS256" } var result = model_client.REST_POST({}, client_data); client_data = api2.GET(model_client, result.key ); } if (!client_data) shared.internal_error("Client-registration for {0} not found".format(client_id)); var model_client_perslid = new model_aut_client_perslid({ internal: true }); // Soms nieuwe cp_data maken. Het kan zijn dat je een ander device aan het registreren bent var cp_data = api2.GET(model_client_perslid, { filter: { "autclient": client_data.id, "person": user_key, "device_id": device_id } }); if (!cp_data) { var cp_data = { "autclient" : client_data.id, "scope" : "*", "device_id" : device_id, "device_name" : device_name, "refreshtoken": '1$' + customerId + "_" + shared.random(32), // unused yet "refreshdate" : new Date(), "accesstoken" : '1$' + customerId + "_" + shared.random(32), // Does not expire yet? "accessdate" : new Date(), "login" : new Date(), "person" : user_key, "pushtoken" : push_token || (customerId + "_" + shared.random(32)) } var result = model_client_perslid.REST_POST({}, cp_data); // "App {0} aanmelding voor {1}/{2}"; shared.trackaction("PRSLOG", user_key, L("lcl_client_perslid_registered").format(client_id, device_name, device_id)); cp_data = api2.GET(model_client_perslid, result.key ); } else // bestaande cp_data. Maak nieuw access token (vorige laten vervallen?) { var new_cp_data = { "accesstoken" : '1$' + customerId + "_" + shared.random(32), // Does not expire yet? "accessdate" : new Date() } if (push_token) // Misschien een nieuwe gekregen? { new_cp_data.pushtoken = push_token; } var result = model_client_perslid.REST_PUT({}, new_cp_data, cp_data.id); cp_data = api2.GET(model_client_perslid, cp_data.id ); } var result = { "fcltversion": FCLTVersion, "instance_url": HTTP.urlzelf() + "/", "push_token": cp_data.pushtoken, "device_id": cp_data.device_id, "access_token": cp_data.accesstoken, // JWT met SP 'FCLTAPP1'? Of JWT met IDP 'FACILITOR'? // Wel bij elke klant aan te maken dan? Of automatisch? // bearer is stateless/ single request dus geen redirect // maar via url &jwt= zou wel kunnen? "issued_at": Math.floor(cp_data.accessdate.getTime() / 1000) // "refresh_url": HTTP.urlzelf() + "/appl/aut/getapptoken.asp?client_id={0}&auth={1}".format(sp, spp_data.refreshtoken) } // een accesstoken wordt eventueel weer opgevangen in loginTry via http header X-FACILITOR-ACCESS-TOKEN Session("aut_client_key") = cp_data.autclient.id; Session("aut_client_name") = cp_data.autclient.name; Response.Write(JSON.stringify(result)); Response.End; %>