Skip to content

Commit e9d9327

Browse files
committed
Incorporated OIDC for authenticating towards Azure in GH Action
1 parent 846388f commit e9d9327

File tree

1 file changed

+22
-4
lines changed

1 file changed

+22
-4
lines changed

hvalfangst_function/function_app.py

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1-
import logging
21
import json
3-
import pandas as pd
4-
import azure.functions as func
2+
import logging
3+
import os
54
from io import StringIO
5+
6+
import azure.functions as func
7+
import jwt
8+
import pandas as pd
69
from sklearn.preprocessing import LabelEncoder
710

811
# Decree and declare our project as an Azure Function App subsidiary
@@ -60,10 +63,25 @@ def blob_trigger(inbound: func.InputStream, outbound: func.Out[str]):
6063
return f"Error: {str(e)}"
6164

6265

66+
def validate_jwt(token: str, audience: str) -> bool:
67+
try:
68+
decoded = jwt.decode(token, audience=audience, options={"verify_signature": False})
69+
# Optionally check claims like roles or scopes
70+
return True
71+
except Exception as e:
72+
logging.error(f"JWT validation failed: {e}")
73+
return False
74+
75+
6376
@app.route(route="upload_csv", auth_level=func.AuthLevel.ANONYMOUS)
64-
@app.blob_output(arg_name="outbound", path="hvalfangstcontainer/in/input.csv", connection="") # AzureWebJobsStorage
77+
@app.blob_output(arg_name="outbound", path="hvalfangstcontainer/in/input.csv", connection="AzureWebJobsStorage")
6578
def upload_csv(req: func.HttpRequest, outbound: func.Out[str]) -> str:
6679
try:
80+
81+
token = req.headers.get("Authorization").split(" ")[1] # Extract Bearer token
82+
if not validate_jwt(token, audience=os.environ.get("FUNCTION_APP_CLIENT_ID")):
83+
return func.HttpResponse("Unauthorized", status_code=401)
84+
6785
logging.info("Received HTTP request to upload CSV")
6886

6987
# Parse raw bytes derived from request body to string

0 commit comments

Comments
 (0)