@@ -1977,6 +1977,68 @@ def test_unexpected(self):
19771977 jwt .JWT (jwt = enctok , key = key )
19781978 key .key_ops = None
19791979
1980+ def test_claims_scope (self ):
1981+ key = jwk .JWK ().generate (kty = 'oct' )
1982+
1983+ string_header = '{"alg":"HS256"}'
1984+
1985+ # no scopes provided
1986+ claims = '{}'
1987+ t = jwt .JWT (string_header , claims )
1988+ t .make_signed_token (key )
1989+ token = t .serialize ()
1990+ self .assertRaises (jwt .JWTMissingClaim , jwt .JWT , jwt = token ,
1991+ key = key , check_claims = {"scope" : "read" })
1992+
1993+ # non-string scopes
1994+ claims = '{"scope": 12345}'
1995+ t = jwt .JWT (string_header , claims )
1996+ t .make_signed_token (key )
1997+ token = t .serialize ()
1998+ self .assertRaises (jwt .JWTInvalidClaimValue , jwt .JWT , jwt = token ,
1999+ key = key , check_claims = {"scope" : "read" })
2000+
2001+ # empty scopes
2002+ claims = '{"scope": ""}'
2003+ t = jwt .JWT (string_header , claims )
2004+ t .make_signed_token (key )
2005+ token = t .serialize ()
2006+ self .assertRaises (jwt .JWTInvalidClaimValue , jwt .JWT , jwt = token ,
2007+ key = key , check_claims = {"scope" : "read" })
2008+
2009+ # one correct scope
2010+ claims = '{"scope":"read"}'
2011+ t = jwt .JWT (string_header , claims )
2012+ t .make_signed_token (key )
2013+ token = t .serialize ()
2014+ jwt .JWT (jwt = token , key = key , check_claims = {"scope" : "read" })
2015+ self .assertRaises (jwt .JWTInvalidClaimValue , jwt .JWT , jwt = token ,
2016+ key = key , check_claims = {"scope" : "write" })
2017+
2018+ # multiple scopes including the correct one
2019+ claims = '{"scope":"view read write"}'
2020+ t = jwt .JWT (string_header , claims )
2021+ t .make_signed_token (key )
2022+ token = t .serialize ()
2023+ jwt .JWT (jwt = token , key = key , check_claims = {"scope" : "view" })
2024+ jwt .JWT (jwt = token , key = key , check_claims = {"scope" : "read" })
2025+ jwt .JWT (jwt = token , key = key , check_claims = {"scope" : "write" })
2026+ self .assertRaises (jwt .JWTInvalidClaimValue , jwt .JWT , jwt = token ,
2027+ key = key , check_claims = {"scope" : "wrong" })
2028+
2029+ # one correct scope, invalid value
2030+ claims = '{"scope":"read"}'
2031+ t = jwt .JWT (string_header , claims )
2032+ t .make_signed_token (key )
2033+ token = t .serialize ()
2034+ self .assertRaises (jwt .JWTInvalidClaimFormat , jwt .JWT , jwt = token ,
2035+ key = key , check_claims = {"scope" : 123 })
2036+ self .assertRaises (jwt .JWTInvalidClaimFormat , jwt .JWT , jwt = token ,
2037+ key = key , check_claims = {"scope" : ["test" , "wrong" ]})
2038+
2039+ # finally make sure it doesn't raise if not checked.
2040+ jwt .JWT (jwt = token , key = key )
2041+
19802042
19812043class ConformanceTests (unittest .TestCase ):
19822044
0 commit comments