MFA blokkeert het ophalen van gegevens van een eigen Endpoint

Hallo,

ik probeer via Azure DataFactory gegevens op te halen van TeamLeader middels een eigen opgezette API in Invantive Cloud (via de modules van applicaties). Ik loop nu vast op de MFA instellingen van het account dat ik voor authenticatie heb ingesteld in ADF. In plaats van de gegevens, krijg ik een “voer uw MFA code in”-pagina.

Wat zijn mijn mogelijkheden om om de MFA heen te werken?

De vraag rinkelt niet meteen een belletje. Zou je de huidige dataflow kunnen beschrijven en de code die gebruikt wordt?

In Azure heb ik voor het testen alleen een “copy data” taak in een pipeline staan. Hierin gebruik ik de nieuwe endpoint als source en wil de gegevens in het gunstigste geval meteen wegschrijven in een Microsoft SQL Server database.
Bij het uitvoeren van de pipeline in Azure krijg ik een foutmelding dat er geen valide data vanuit de bron wordt aangeleverd of wanneer ik de data wegschrijf naar een BLOB Storage krijg ik een HTML-pagina, zie ook bijlage.

Wanneer ik de endpoint in een incognito venster open, krijg ik een doorverwijzing naar de MFA authenticator pagina. Met het invoeren van de juiste code, krijg ik de gewenste gegevens te zien.

Wat betreft de endpoint:
https://cloud.invantive.com/app/development/applications/2dbcee3d-57b2-4e1a-b449-1163655c9154/execute/376/modules/a50909e7-a001-43dc-81c6-9d8bd2d41166?table=Teamleader.V2.Deals&date_from=2021-09-27

De code die ik gebruik om in Invantive een nieuwe endpoint te definiëren:

declare
  l_table_name constant varchar2 := cloud_http.get_request_query_parameter_value('table');
  l_date_from  constant varchar2 := cloud_http.get_request_query_parameter_value('date_from');
  l_query      constant varchar2 := 'select * from ' 
                                    || table_name 
                                    || ' where created_at >= '''
                                    || date_from 
                                    || ''' or updated_at >= '''
                                    || date_from 
                                    || ''' for json auto'
                                    ;
begin
  --
  -- Check that a 'table' and 'created_date' are specified.
  --
  if coalesce(length(table_name), 0) = 0
  then
    raise_application_error(-20163, 'Specify a value for the ''table'' query parameter.');
  end if;
  if date_from is null
  then
    raise_application_error(-20163, 'Specify a value for the ''date_from'' query parameter.');
  end if;
  --
  -- Check if table exists
  --
  declare
    l_dummy pls_integer;
  begin
    select 1
    into   l_dummy
    from   systemtables@datadictionary
    where  full_qualified_name = table_name
    ;
  exception
    when no_data_found
    then 
      raise_application_error(-20163, 'There is no table with the name ''' || table_name || '''.');
  end;
  --
  -- Set return to output JSON.
  --
  cloud_http.set_response_content_type('application/json');
  --
  -- Loop over result set and append JSON to response body.
  --
  for r in (execute immediate query)
  loop
    cloud_http.append_to_response_body_text(r.json);
  end loop;
end;

Alvast bedankt voor de moeite!

Er zijn twee verbeterpunten:

  1. De gebruikte PSQL module kan eventueel vervangen worden door onderstaande.
  2. Voor het testen van de module kan eventueel Invantive Cloud gebruikt worden, maar voor productiegebruik is het nodig om Invantive App Online te gebruiken.

PSQL Module

declare
  l_table_name varchar2;
  l_date_from  date;
  l_query      varchar2;
begin
  --
  -- Check that a 'table' and 'created_date' are specified.
  --
  l_table_name := cloud_http.get_request_query_parameter_value('table');
  if coalesce(length(l_table_name), 0) = 0
  then
    raise_application_error(-20163, 'Specify a value for the ''table'' query parameter.');
  end if;
  --
  l_date_from := to_date(cloud_http.get_request_query_parameter_value('date_from'), 'YYYY-MM-DD');
  if l_date_from is null
  then
    raise_application_error(-20163, 'Specify a value for the ''date_from'' query parameter in the format YYYY-MM-DD.');
  end if;
  --
  -- Check that table exists on Teamleader.
  --
  declare
    l_dummy pls_integer;
  begin
    select 1
    into   l_dummy
    from   systemtables@datadictionary
    where  full_qualified_name = l_table_name
    -- Optional: filter on alias or provider_name being Teamleader.
    ;
  exception
    when no_data_found
    then 
      raise_application_error(-20163, 'There is no table with the name ''' || table_name || '''.');
  end;
  --
  -- Set return to output JSON.
  --
  cloud_http.set_response_content_type('application/json');
  l_query := 'select * from ' 
             || l_table_name 
             || '@tlr' /* Or whatever alias. */
             || ' where created_at >= to_date('''
             || to_char(l_date_from, 'YYYY-MM-DD')
             || '', ''YYYY-MM-DD'')' or updated_at >= to_date('''
             || to_char(l_date_from, 'YYYY-MM-DD')
             || '', ''YYYY-MM-DD'')' for json auto'
             ;
  --
  -- Loop over result set and append JSON to response body.
  --
  for r in (execute immediate l_query)
  loop
    cloud_http.append_to_response_body_text(r.json);
  end loop;
end;

Invantive App Online

Modules kunnen gedurende het bouwen getest worden op Invantive Cloud. Dit is voor interactief gebruik met een eis om te autoriseren via gebruikersnaam/wachtwoord plus MFA.

Invantive App Online is het broertje van Invantive Bridge Online. Waar Invantive Bridge Online dient om gegevens uit bijvoorbeeld Teamleader in OData4 formaat naar bijvoorbeeld Power BI of Power Query te sturen, kunnen via Invantive App Online apps gestart worden met de Invantive Cloud-aanmeldgegevens en alleen IP-adrescontrole.

De URL voor een module is eenvoudig op te vragen door op “Kopieer Link” te klikken vanuit het uitvoeren van de applicatie in Invantive Cloud:

Link naar Invantive App Online van module

Een dergelijke link ziet ongeveer zo uit:

https://app-online.cloud/apps/WAARDE/databases/DATABASE-URL/modules/WAARDE/

Een bericht is gesplitst naar een nieuw topic: Kopieer Link werkt niet voor applicatiemodules

Een bericht is gesplitst naar een nieuw topic: Cache op App Online