| 11 | |
| 12 | class OpenIDMixin: |
| 13 | def fetch_jwk_set(self, force=False): |
| 14 | metadata = self.load_server_metadata() |
| 15 | jwk_set = metadata.get("jwks") |
| 16 | if jwk_set and not force: |
| 17 | return jwk_set |
| 18 | |
| 19 | uri = metadata.get("jwks_uri") |
| 20 | if not uri: |
| 21 | raise RuntimeError('Missing "jwks_uri" in metadata') |
| 22 | |
| 23 | with self._get_session() as session: |
| 24 | resp = session.request("GET", uri, withhold_token=True) |
| 25 | resp.raise_for_status() |
| 26 | jwk_set = resp.json() |
| 27 | |
| 28 | self.server_metadata["jwks"] = jwk_set |
| 29 | return jwk_set |
| 30 | |
| 31 | def userinfo(self, **kwargs): |
| 32 | """Fetch user info from ``userinfo_endpoint``.""" |