Slide 16
Slide 16 text
16
Envoyのポリシー例
allow if {
is_token_valid
action_allowed
}
is_token_valid if {
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のデコードと検証