{ token.valid now := time.now_ns() / 1000000000 token.payload.nbf <= now now < token.payload.exp } action_allowed if { http.method == "GET" token.payload.role == "guest" glob.match("/people/*", ["/"], http.path) } action_allowed if { http.method == "POST" token.payload.role == "admin" glob.match("/people", ["/"], http.path) lower(input.parsed_body.firstname) != base64url.decode(token.payload.sub) } token := {"valid": valid, "payload": payload} if { [_, encoded] := split(http.headers.authorization, " ") [valid, _, payload] := io.jwt.decode_verify(encoded, {"secret": "secret"}) } (1) is_token_valid と action_allowed の両方が成立した場合通信を許可
(2) JWTのnbf & expを検証
(3) 「メソッドがGET」
「JWTのroleが “guest”」
「パスが “/people/*”」
の全てに合致したらOK
(4) 「メソッドがPOST」
「JWTのroleが “admin”」
「パスが “/people”」
の全てに合致したらOK
(5) JWTのデコードと検証