canal du nord france

Slik koder du Oauth i en skyfunksjon ved hjelp av Python

En RESTful API er en arkitektonisk utforming for et API (Application Program Interface) som bruker HTTP-forespørsler til å få tilgang til og bruke data. OAuth er en godkjenningsprotokoll som lar deg godkjenne ett program som samhandler med et annet på dine vegne uten å gi bort passordet ditt.

OAuth er et delegert autorisasjonsrammeverk som gjør det mulig for apper å få begrenset tilgang (omfang) til en brukers data uten å gi bort en brukers passord. Den decouples godkjenning fra autorisasjon og støtter flere brukstilfeller som adresserer forskjellige enhetsfunksjoner.

Den grunnleggende autentiseringen for restful API-er ser omtrent ut som kodeeksemplet nedenfor, koden er opprettet med Python og bruker Google Secrets Manager til å skjule hemmelighetene.

Enkel godkjenning

    # Install Google Libary
    from google.cloud import secretmanager
    
    # Get the secret for Token
    token = _getsecrets("token")

    # Get the secret for Company ID
    companyid = _getsecrets("company_id")

    # Create the encoded authentication parameters
    auth = companyid + ':' + token
    encoded_u = base64.b64encode(auth.encode()).decode()

    # Create the Header and url
    headers = {
        "Authorization" : "Basic %s" % encoded_u
    }

Kodesnutten leser hemmelighetene, og fra hemmelighetene oppretter og koder du godkjenningen som brukes i overskriften. Konfigurere URL-adressen og kalle funksjonen _requestandstore med URL-adresse og hode.

    url = 'https://api.test.com/v1/users'
    _requestandstore(url, headers)         

Funksjonen som gjør forespørselen, URL-forespørselen er grei ved å inkludere detaljene i overskriftene for request.get

def _requestandstore(url, header):
    try:
        # Make a request
        response = requests.get(url, params={'page': 1, 'per_page': 10}, headers=header)

Følgende kodesnuttfunksjoner er for å få hemmelighetene fra Google CLoud Secrets Manager.

def _getsecrets(secret_name):
    resource_name = f"projects/{project_id}/secrets/{secret_name}/versions/latest"
    try:
        response = client.access_secret_version(request={"name": resource_name})
        return response.payload.data.decode('UTF-8')
    except:
        return False

Godkjenning av Oauth

OAuth (Open Authorization) er en åpen standard for tilgang til et program for brukere av den applikasjonen for å gi nettsteder eller applikasjoner tilgang til informasjonen sin på andre nettsteder, men uten å gi dem passordene. Når en bruker bruker Oauth på et nettsted, dukker det opp en samtykkeskjerm for å la brukerne gi sin tillatelse.

En skyfunksjon som kjører på en serverløs server, har ikke et brukergrensesnitt som lar brukerne gi det samtykket, i neste del her vil jeg forklare hvordan vi bruker OAuth i en cloud-funksjon.

Før jeg går videre, liker jeg å nevne at følgende kode fungerer bra i tilpasset RestFul API Oauth, hvis du skal bruke en Google API – kan det være lurt å lese Datapipeline youtube-analyse til BigQuery med Airbyte der jeg skrev om hvordan du kan få det til med Google OAuth.

Falsk Oauth-pålogging

For at vi skal kunne bruke OAuth i en cloud-funksjon, må vi gjøre en falsk OAuth-pålogging, slik at vi kan få tilgangstokenet, dette gjøres ved å gjøre en ugyldig forespørsel. Hvis redirect_uri er ugyldig, stopper leseren omadresseringen og viser autorisasjonskoden.

Her er koden – først må vi få vår klient-ID, klienthemmelighet og token_url, denne informasjonen er gitt av tjenesteleverandøren du prøver å koble til.

Det neste trinnet er å angi grant_type og lage en RestFUL API-innleggsforespørsel for å få tilgangstokenet.

    # Get the secret for Client ID
    client_id = _getsecrets("client_id")

    # Get the secret for Client Secret
    client_secret = _getsecrets("client_secret")

    # Get the secret for Token URL
    token_url = _getsecrets("token_url")

    # Fake Oauth login to get an access token by making an invalid request, If the redirect_uri is invalid,
    # the browser will stop the redirect and show the authorization code.
    data = {'grant_type': 'client_credentials'}
    access_token_response = requests.post(token_url, data=data, verify=False, allow_redirects=False, auth=(client_id, client_secret))
    tokens = json.loads(access_token_response.text)

    # Create the Header and url
    headers = {
        'Authorization': 'Bearer ' + tokens['access_token']
    }

Når du har tilgangstokenet, angir du RESTFUL API URL med endepunkt og foretar et RestFul API-kall.

    url = 'https://api.test.com/api/v2/users'
    _requestandstore(filename, url, headers)

def _requestandstore(filename, url, header):
    try:
        # Make a request to API
        response = requests.get(url, params={'page': 1, 'perPage': 400}, headers=header, verify=False)
 

Det er det, dette bør fungere i de fleste scenarier – og råd er å snakke med tjenesteleverandøren du prøver å få kontakt med for å utarbeide detaljene.

Brukstilfeller

For å nevne det er flere brukstilfeller der du vil bruke en skyfunksjon for å få tilgang til et tjenesteleverandørprogram. Jeg vil nevne noen, du kan ha mer, så vennligst kommenter nedenfor.

  • Tjenesteleverandørutvinning av data til Data Warehosue som skal brukes til Analytics
  • Uttrekking av data til data Warehosue som skal brukes til analytics
  • Online media utvinning av data til Data Warehosue som skal brukes til Analytics

Posted

in

,

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *