Algorithm header
Audience claim for this token (Str or Str[])
If value is a Str it will converted to a Str[] of size 1
Return a negative integer, zero, or a positive integer if this object is less than, equal to, or greater than the specified object:
this < that => <0
this == that => 0
this > that => >0
This method may also be accessed via the <
<=
<=>
>=
and >
shortcut operators. If not overridden the default
implementation compares the toStr
representations. Also see docLang.
Examples:
3.compare(8) => -1
8.compare(3) => 1
8.compare(8) => 0
3 <=> 8 => -1 // shortcut for 3.compare(8)
Provide a Key (PrivKey or SymKey) to sign and return the base64 encoded Jwt
Null key will return an unsigned base64 encoded JWT
The alg field must be set to a supported JWS algorithm
The following JWS Algorithms are supported:
pair := Crypto.cur.genKeyPair("RSA", 2048)
priv := pair.priv
jwtStr := Jwt {
it.alg = "RS256"
it.claims = ["myClaim": "ClaimValue"]
it.exp = DateTime.nowUtc + 10min
it.iss = "https://fantom.accounts.dev"
}.encode(priv)
Compare this object to the specified for equality. This
method may be accessed via the == and != shortcut operators.
If not overridden the default implementation compares for
reference equality using the === operator. If this method
is overridden, then hash() must also be overridden such that
any two objects which return true for equals() must return
the same value for hash(). This method must accept null
and
return false.
Expiration claim for this token
When encoded, the value will be converted to TimeZone.utc
,
the epoch const will be subtracted from this value and it
will be converted to seconds
When decoded, the value will be converted to TimeZone.utc
Return a unique hashcode for this object. If a class overrides hash() then it must ensure if equals() returns true for any two objects then they have same hash code.
Issued at claim for this token
When encoded, the value will be converted to TimeZone.utc
,
the epoch const will be subtracted from this value and it
will be converted to seconds
When decoded, the value will be converted to TimeZone.utc
Issuer claim for this token
JWT ID claim for this token
Key ID header
When encoding this value will take precedent if the kid parameter is also set in the JOSE header
Not before claim for this token
When encoded, the value will be converted to TimeZone.utc
,
the epoch const will be subtracted from this value and it
will be converted to seconds
When decoded, the value will be converted to TimeZone.utc
Subject claim for this token
Get an immutable representation of this instance or throw NotImmutableErr if this object cannot be represented as an immutable:
Return a string representation of this object.
Trap a dynamic call for handling. Dynamic calls are invoked with the -> shortcut operator:
a->x a.trap("x", null)
a->x() a.trap("x", null)
a->x = b a.trap("x", [b])
a->x(b) a.trap("x", [b])
a->x(b, c) a.trap("x", [b, c])
The default implementation provided by Obj attempts to use reflection. If name maps to a method, it is invoked with the specified arguments. If name maps to a field and args.size is zero, get the field. If name maps to a field and args.size is one, set the field and return args[0]. Otherwise throw UnknownSlotErr.
Convenience function to check the value of a claim
If value of JWT claim is a List, this function checks that the expectedValue is contained in the List.
If expectedValue is null, just checks if the claim exists
Throws Err if claim does not exist or expectedValue does not match (or is not contained in the List)
jwt := Jwt.decode("1111.2222.3333", pubKey)
.verifyClaim("iss", "https://fantom.accounts.dev")
Optional
expectedValue: JsObjThis method called whenever an it-block is applied to an
object. The default implementation calls the function with this
,
and then returns this
.
Static
decodeDecode a Jwt from an encoded Str
The key parameter supports these types to verify the signature:
is missing or no matching kid is found in the list
If the exp and/or nbf claims exist, those will be verified
jwk := [
"kty": "EC",
"use": "sig",
"crv": "P-256",
"kid": "abcd",
"x": "I59TOAdnJ7uPgPOdIxj-BhWSQBXKS3lsRZJwj5eIYAo",
"y": "8FJEvVIZDjVBnrBJPRUCwtgS86rHoFl1kBfbjX9rOng",
"alg": "ES256",
]
ecJwk := Crypto.cur.loadJwk(jwk)
jwt := Jwt.decode("1111.2222.3333", ecJwk.key)
jwks := Crypto.cur.loadJwksForUri(`https://example.com/jwks.json`)
jwt2 := Jwt.decodeJwks("4444.5555.6666", jwks)
Static
echoWrite x.toStr
to standard output followed by newline. If x
is null then print "null". If no argument is provided then
print an empty line.
Optional
x: JsObjStatic
make
Models a JSON Web Token (JWT) as specified by RFC7519
A JWT includes three sections:
11111111111.22222222222.33333333333
These sections are encoded as base64url strings and are separated by dot (.) characters.
The (alg) parameter must be set to a supported JWS algorithm.
The following JWS algorithms are supported: