111 lines
5.1 KiB
Plaintext
111 lines
5.1 KiB
Plaintext
<%@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;
|
|
%>
|
|
<!-- #include file="../Shared/common.inc" -->
|
|
<!-- #include file="./login.inc" -->
|
|
<!-- #include file="../api2/api2.inc" -->
|
|
<!-- #include file="../api2/model_aut_client.inc" -->
|
|
<%
|
|
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", "<unkwown>"); // 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;
|
|
%>
|