diff get_agent.py @ 42:530650b3bc40 default tip

something changed in pom to break pyjwt. switched to jwskate
author drewp@bigasterisk.com
date Wed, 14 Dec 2022 22:07:19 -0800
parents 293a694304b8
children
line wrap: on
line diff
--- a/get_agent.py	Sat Nov 19 17:18:55 2022 -0800
+++ b/get_agent.py	Wed Dec 14 22:07:19 2022 -0800
@@ -1,22 +1,24 @@
 import logging
 
 import bottle
-import jwt
 from rdflib import URIRef
-
+import requests
+from jwskate import Jwt, JwkSet
 log = logging.getLogger(__name__)
 
-jwks_client = jwt.PyJWKClient(uri='https://authenticate.bigasterisk.com/.well-known/pomerium/jwks.json')
-
+jwkset = JwkSet(requests.get('https://authenticate.bigasterisk.com/.well-known/pomerium/jwks.json').json())
 
 def bottleGetAgent() -> URIRef:
     pomAssertion = bottle.request.headers.get('X-Pomerium-Jwt-Assertion', None)
-
-    sk = jwks_client.get_signing_key_from_jwt(pomAssertion)
-    j = jwt.decode(pomAssertion, key=sk.key, algorithms=['ES256'], audience="bigasterisk.com")
-
+    log.debug('pomAssertion=%r', pomAssertion)
+    jwt = Jwt(pomAssertion)
+    jwt.validate(jwkset['keys'][0], #??
+                 algs=['ES256'], 
+                 issuer='authenticate.bigasterisk.com', 
+                 audience='bigasterisk.com')
+    log.debug('claims=%r', jwt.claims)
     foaf = {
         'drewpca@gmail.com': 'http://bigasterisk.com/foaf.rdf#drewp',
         'kelsimp@gmail.com': 'http://bigasterisk.com/kelsi/foaf.rdf#kelsi',
-    }[j['email']]
+    }[jwt.claims['email']]
     return URIRef(foaf)