Så här kodar du Oauth i en molnfunktion med Python

canal du nord france
canal du nord france

Ett RESTful API är en arkitektonisk design för ett API (Application Program Interface) som använder HTTP-begäranden för att komma åt och använda data. OAuth är ett autentiseringsprotokoll som låter dig godkänna ett program som interagerar med ett annat för din räkning utan att ge bort ditt lösenord.

OAuth är ett delegerat auktoriserings ramverk som gör det möjligt för appar att få begränsad åtkomst (omfattningar) till en användares data utan att ge bort en användares lösenord. Det frikopplar autentisering från auktorisering och stöder flera användnings fall som behandlar olika enhetsfunktioner.

Den grundläggande autentiseringen för RestFul API: er ser ut ungefär som kodexemplet nedan, koden skapas med Python och använder Google Secrets Manager för att dölja hemligheterna.

Grundläggande autentisering

    # 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
    }

Kodavsnittet läser hemligheterna och från hemligheterna skapa och koda autentiseringen som används i sidhuvudet. Konfigurera URL:en och anropa funktionen _requestandstore med URL och sidhuvud.

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

Funktionen som gör begäran, URL-begäran är enkel genom att inkludera information om rubrikerna för request.get

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

Följande kodavsnittsfunktioner är för att få hemligheterna från Google

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

Oauth-autentisering

OAuth (Open Authorization) är en öppen standard för tillgång till en applikation för användare av den applikationen för att ge webbplatser eller applikationer tillgång till deras information på andra webbplatser men utan att ge dem lösenorden. När en användare använder Oauth på en webbplats dyker en samtyckesskärm upp så att användarna kan ge sitt tillstånd.

En molnfunktion som körs på en serverlös server har inte ett användargränssnitt som gör det möjligt för användarna att ge det medgivandet, i nästa del här kommer jag att förklara hur vi använder OAuth i en molnfunktion.

Innan jag går vidare vill jag nämna att följande kod fungerar bra i anpassade RestFul API Oauth, om du ska använda ett Google API – du kanske vill läsa Datapipeline youtube-analys till BigQuery med Airbyte där jag skrev om hur du kan få det gjort med Google OAuth.

Falsk oauth inloggning

För att vi ska kunna använda OAuth i en molnfunktion måste vi göra en falsk OAuth-inloggning, så att vi kan få åtkomsttoken, detta görs genom att göra en ogiltig begäran. Om redirect_uri är ogiltig stoppar webbläsaren omdirigeringen och visar auktoriseringskoden.

Här är koden – först måste vi få vårt klient-ID, klienthemlighet och token_url, denna information tillhandahålls av den tjänsteleverantör du försöker ansluta till.

Nästa steg är att ställa in grant_type och göra en RestFUL API-postbegäran för att få åtkomsttoken.

    # 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 åtkomsttoken anger du din RestFUL API-URL med slutpunkt och gör ett RestFul API-anrop.

 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 är det, detta bör fungera i de flesta scenarier – och råd är att prata med den tjänsteleverantör du försöker ansluta till för att räkna ut detaljerna.

Använd ärenden

För att nämna finns det flera användnings fall där du vill använda en moln funktion för att få tillgång till ett tjänst leverantörs program. Jag kommer att nämna några, du kanske har mer så kommentera nedan.

  • Utvinning av data till Data Warehosue som ska användas för Analytics
  • Extrahering av data på sociala medier till Data Warehosue som ska användas för Analys
  • Online Media extrahering av data till Data Warehosue som ska användas för Analytics

Leave a reply:

Your email address will not be published.

Site Footer

Sliding Sidebar

Brilliantly

SAFE!

2022