mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-08-08 20:32:10 -04:00
Add the option to validate the iss
and aud
claims for JWT logins. (#7827)
This commit is contained in:
parent
4db1509516
commit
77d2c05410
6 changed files with 182 additions and 15 deletions
|
@ -89,12 +89,19 @@ class LoginRestServlet(RestServlet):
|
|||
def __init__(self, hs):
|
||||
super(LoginRestServlet, self).__init__()
|
||||
self.hs = hs
|
||||
|
||||
# JWT configuration variables.
|
||||
self.jwt_enabled = hs.config.jwt_enabled
|
||||
self.jwt_secret = hs.config.jwt_secret
|
||||
self.jwt_algorithm = hs.config.jwt_algorithm
|
||||
self.jwt_issuer = hs.config.jwt_issuer
|
||||
self.jwt_audiences = hs.config.jwt_audiences
|
||||
|
||||
# SSO configuration.
|
||||
self.saml2_enabled = hs.config.saml2_enabled
|
||||
self.cas_enabled = hs.config.cas_enabled
|
||||
self.oidc_enabled = hs.config.oidc_enabled
|
||||
|
||||
self.auth_handler = self.hs.get_auth_handler()
|
||||
self.registration_handler = hs.get_registration_handler()
|
||||
self.handlers = hs.get_handlers()
|
||||
|
@ -368,16 +375,22 @@ class LoginRestServlet(RestServlet):
|
|||
)
|
||||
|
||||
import jwt
|
||||
from jwt.exceptions import InvalidTokenError
|
||||
|
||||
try:
|
||||
payload = jwt.decode(
|
||||
token, self.jwt_secret, algorithms=[self.jwt_algorithm]
|
||||
token,
|
||||
self.jwt_secret,
|
||||
algorithms=[self.jwt_algorithm],
|
||||
issuer=self.jwt_issuer,
|
||||
audience=self.jwt_audiences,
|
||||
)
|
||||
except jwt.PyJWTError as e:
|
||||
# A JWT error occurred, return some info back to the client.
|
||||
raise LoginError(
|
||||
401,
|
||||
"JWT validation failed: %s" % (str(e),),
|
||||
errcode=Codes.UNAUTHORIZED,
|
||||
)
|
||||
except jwt.ExpiredSignatureError:
|
||||
raise LoginError(401, "JWT expired", errcode=Codes.UNAUTHORIZED)
|
||||
except InvalidTokenError:
|
||||
raise LoginError(401, "Invalid JWT", errcode=Codes.UNAUTHORIZED)
|
||||
|
||||
user = payload.get("sub", None)
|
||||
if user is None:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue