Wat is de rol van Base64 encoding en binaire data in Power Query API calls?

In API calls wordt regelmatig gebruik gemaakt van “Basic” authentication. Dit houdt in dat er simpelweg een gebruikersnaam en wachtwoord gebruikt wordt om te authentiseren (ben je wie je zegt dat je bent), en te autoriseren (heb je wel toegang tot de data).

Om de authenticatie en autorisatie binnen een API call die ik laatst in Power Query deed goed te regelen, heb ik gebruik gemaakt van het onderstaande stukje M code:

auth = “Basic ” & Binary.ToText(Text.ToBinary(username & “:” & password), BinaryEncoding.Base64)

Hierin definieer ik een variabele “auth” die ik later in de header van mijn API call wil gebruiken. De header van een API call wordt gebruikt om metadata mee te sturen zoals gebruikersnaam en wachtwoord.

Er gebeurt het een en ander in deze variabele “auth”: binnen deze variabele worden twee andere variabelen gebruikt, namelijk “username” en “password”. Deze zijn al eerder in de M query gedefinieerd en bevatten de gebruikersnaam en het wachtwoord. So far so good. Waarom worden deze variabelen echter eerst naar een binair format omgezet met behulp van de functie “Text.ToBinary” en vervolgens Base64 encoded met behulp van de functie “Binary.ToText( … , BinaryEncoding.Base64)”?

Houd je vast een reis vol met nullen en eenen (of is het enen?)!

Base64 encoding wordt gebruikt om ervoor te zorgen dat een verstuurd bericht van een plek naar een andere plek in hetzelfde “format” aankomt. Het kan bijvoorbeeld zijn dat wanneer jij een wachtwoord meestuurt in een header van een API call, dat de ontvanger van dit wachtwoord een bepaald teken niet herkent. Stel bijvoorbeeld dat het volgende teken in je wachtwoord voorkomt: “£”. Wanneer je dit wachtwoord zonder encoding op zou sturen naar de ontvanger en de ontvanger het teken niet zou herkennen, zou je onterecht geen toegang krijgen tot de onderliggende data. Door gebruik te maken van encoding zoals Base64 encoding, wordt je wachtwoord omgezet in tekens die praktisch iedere ontvanger kan herkennen.

Dat is dus de reden dat er Base64 encoded wordt, maar hoe zit dat met die omzetting van je gebruikersnaam en wachtwoord naar binaire gegevens?

Je moet je gebruikersnaam en wachtwoord eerst omzetten naar binaire data omdat Base64 encoding ontworpen is om met binaire data om te gaan. Base64 werkt met groepen van 24 bits binaire gegevens tegelijk (zie het voorbeeld hieronder voor een voorbeeld van een “bit”). Het neemt een groep van 24 bits en verdeelt deze weer in stukken van 6 bits. Elk van deze 6-bits groepen wordt dan weergegeven als een karakter in het Base64 alfabet. Dit alfabet bestaat uit 64 karakters en is een soort van vertaaltabel.

Dus de opeenvolging van gebeurtenissen is als volgt:

Wachtwoord / key in tekst format:

Hello

Vertaling naar binaire datastroom van 6 bytes (elke letter is een byte; een byte bestaat meestal uit 8 bits en een bit is een binair getal: 1 of 0):

01001000  01100101  01101100  01101100  01101111

Binaire datastroom opdelen in groepen van 6 bits:

010010  000110  010101  101100  011011  000110  111100

Elke van deze 6 bits groepen betekent in Base64 encoding een nummer:

18  6  21  44  27  6  60

Elk van deze nummers kan vertaald worden naar een letter, nummer of symbolen met behulp van de Base64 tabel:

SGVsbG8=

Voila! We hebben een stuk tekst dat door het overgrote deel van de ontvangers herkend wordt. Deze ontvangers zullen dan Base64 decoding toepassen zodat het wachtwoord gedecodeerd aangeboden en herkend kan worden. Met andere woorden, de ontvanger zal Base64 decoding toepassen om van “SGVsbG8=”, “Hello” te maken. Het eindresultaat is dat jij geauthentiseerd wordt en toegang tot de data krijgt!

Meer informatie over Binary.ToText is te vinden in de onderstaande link.

https://powerquery.how/Binary-totext/

Leave Comment

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *