auth

swadhinbiswas committed 2 years ago
5b81fa9
1 parent aa0cc75
commit 5b81fa9
2 files changed
+42 -10
▼backend/auth/dependency.py
+21-0
1
+from typing import List
2
+from auth_hader import get_bearer_token
3
+from json_web_token import JsontoWebToken
4
+from expreance import PermissionDeniedException
5
+from fastapi import Depends
6
+
7
+def valid_token(token: str = Depends(get_bearer_token)):
8
+ return JsontoWebToken(token).validate()
9
+
10
+class PermissionValidation:
11
+ def __init__(self,permission:List[str]):
12
+ self.permission = permission
13
+
14
+ def __call__(self,token: str = Depends(valid_token)):
15
+ token_permission = token.get("permissions")
16
+ token_permission = set(token_permission)
17
+ permission = set(self.permission)
18
+ if not permission.issubset(token_permission):
19
+ raise PermissionDeniedException
20
+
21
+
0
22
▼backend/auth/json_web_token.py
+21-10
1
1
from dataclasses import dataclass
2
2
import jwt
3
-from matplotlib.pylab import f
4
-from Gellary.backend import auth
5
3
from settings import setting
6
4
from expreance import BadCredentialsException,UnableCredentialsException
7
5
11
9
auth0_domain: str=f"{setting.AUTH0_DOMAIN}/"
12
10
auth0_audience: str=setting.AUTH0_AUDIENCE
13
11
algorithm: str=setting.ALGORITHM
14
- jwks=f"{auth0_domain}.well-known/jwks.json"
12
+ jwt_url=f"{auth0_domain}.well-known/jwks.json"
15
13
16
14
def verify_jwt(self):
17
15
try:
18
- unverified_header = jwt.get_unverified_header(self.jwt_access_token)
19
- except jwt.JWTError:
20
- raise BadCredentialsException
21
- if unverified_header["alg"] != "RS256":
22
- raise UnableCredentialsException
23
- return unverified_header
24
-
16
+ jwt_client=jwt.PyJWKClient(jwks_uri=self.jwt_url)
17
+ jwt_signingkey=jwt_client.get_signing_key_from_jwt(self.jwt_access_token).key
18
+ payload=jwt.decode(self.jwt_access_token,
19
+ jwt_signingkey,
20
+ algorithms=[self.algorithm],
21
+ audience=self.auth0_audience,
22
+ issuer=self.auth0_domain)
23
+
24
+ except jwt.exceptions.PyJWKClinetError:
25
+ raise UnableCredentialsException
26
+ except jwt.exceptions.PyJWTError:
27
+ raise BadCredentialsException
28
+ except jwt.exceptions.InvalidTokenError:
29
+ raise BadCredentialsException
30
+
31
+ return payload
32
+
33
+ def validate(self):
34
+ return self.verify_jwt()
35
+#
25
36