1
1
import logging
2
2
3
+ from cryptojwt .exception import UnsupportedAlgorithm
4
+
3
5
from oidcmsg .time_util import utc_time_sans_frac
4
- from ..exception import MessageException , NotForMe
6
+ from ..exception import MessageException
7
+ from ..exception import NotForMe
5
8
from ..message import Message
6
9
from ..message import REQUIRED_LIST_OF_STRINGS
7
10
from ..message import SINGLE_OPTIONAL_STRING
8
11
from ..message import SINGLE_REQUIRED_INT
9
12
from ..message import SINGLE_REQUIRED_JSON
10
13
from ..message import SINGLE_REQUIRED_STRING
11
14
from ..oauth2 import ResponseMessage
12
- from ..oidc import clear_verified_claims , verify_id_token
13
- from ..oidc import verified_claim_name
14
- from ..oidc import IdToken
15
15
from ..oidc import ID_TOKEN_VERIFY_ARGS
16
+ from ..oidc import IdToken
16
17
from ..oidc import MessageWithIdToken
17
18
from ..oidc import SINGLE_OPTIONAL_IDTOKEN
18
-
19
+ from ..oidc import clear_verified_claims
20
+ from ..oidc import verified_claim_name
21
+ from ..oidc import verify_id_token
19
22
20
23
logger = logging .getLogger (__name__ )
21
24
@@ -25,7 +28,7 @@ class RefreshSessionRequest(MessageWithIdToken):
25
28
c_param .update ({
26
29
"redirect_url" : SINGLE_REQUIRED_STRING ,
27
30
"state" : SINGLE_REQUIRED_STRING
28
- })
31
+ })
29
32
30
33
31
34
class RefreshSessionResponse (MessageWithIdToken , ResponseMessage ):
@@ -47,7 +50,7 @@ class EndSessionRequest(Message):
47
50
"id_token_hint" : SINGLE_OPTIONAL_IDTOKEN ,
48
51
"post_logout_redirect_uri" : SINGLE_OPTIONAL_STRING ,
49
52
"state" : SINGLE_OPTIONAL_STRING
50
- }
53
+ }
51
54
52
55
def verify (self , ** kwargs ):
53
56
super (EndSessionRequest , self ).verify (** kwargs )
@@ -111,7 +114,7 @@ def verify(self, **kwargs):
111
114
raise ValueError ('Wrong member value in "events"' )
112
115
113
116
# There must be either a 'sub' or a 'sid', and may contain both
114
- if not ('sub' in self or 'sid' in self ):
117
+ if not ('sub' in self or 'sid' in self ):
115
118
raise ValueError ('There MUST be either a "sub" or a "sid"' )
116
119
117
120
try :
@@ -141,6 +144,12 @@ def verify(self, **kwargs):
141
144
if self ['iat' ] > (_now + _skew ):
142
145
raise ValueError ('Invalid issued_at time' )
143
146
147
+ _allowed = kwargs .get ("allowed_sign_alg" )
148
+ if _allowed and self .jws_header ['alg' ] != _allowed :
149
+ _msg = "Wrong token signing algorithm, {} != {}" .format (
150
+ self .jws_header ['alg' ], kwargs ["allowed_sign_alg" ])
151
+ raise UnsupportedAlgorithm (_msg )
152
+
144
153
return True
145
154
146
155
@@ -155,7 +164,7 @@ class BackChannelLogoutRequest(Message):
155
164
156
165
c_param = {
157
166
"logout_token" : SINGLE_REQUIRED_STRING
158
- }
167
+ }
159
168
160
169
def verify (self , ** kwargs ):
161
170
super (BackChannelLogoutRequest , self ).verify (** kwargs )
0 commit comments