Phoenix framework: How to decode Phoenix Session Cookie with Java

124 Views Asked by At

I am trying two different ways to decode Phoenix Session Cookie. First one is Elixir's interaction shell, and the second one is with Java.

Please see the following examples;

IEx

iex(1)> set_cookie = "SFMyNTY.g3QAAAABbQAAAAtfY3NyZl90b2tlbm0AAAAYZFRuNUtQMkJ5YWtKT1JnWUtCeXhmNmdP.l0T3G-i8I5dMwz7lEZnQAeK_WeqEZTxcDeyNY2poz_M"
"SFMyNTY.g3QAAAABbQAAAAtfY3NyZl90b2tlbm0AAAAYZFRuNUtQMkJ5YWtKT1JnWUtCeXhmNmdP.l0T3G-i8I5dMwz7lEZnQAeK_WeqEZTxcDeyNY2poz_M"

iex(2)> [_, payload, _] = String.split(set_cookie, ".", parts: 3)
["SFMyNTY",
 "g3QAAAABbQAAAAtfY3NyZl90b2tlbm0AAAAYZFRuNUtQMkJ5YWtKT1JnWUtCeXhmNmdP",
 "l0T3G-i8I5dMwz7lEZnQAeK_WeqEZTxcDeyNY2poz_M"]

iex(3)> {:ok, encoded_term } = Base.url_decode64(payload, padding: false)
{:ok,
 <<131, 116, 0, 0, 0, 1, 109, 0, 0, 0, 11, 95, 99, 115, 114, 102, 95, 116, 111,
   107, 101, 110, 109, 0, 0, 0, 24, 100, 84, 110, 53, 75, 80, 50, 66, 121, 97,
   107, 74, 79, 82, 103, 89, 75, 66, 121, 120, 102, ...>>}

iex(4)> :erlang.binary_to_term(encoded_term)
%{"_csrf_token" => "dTn5KP2ByakJORgYKByxf6gO"}

Java

public static String decodePhoenixSessionCookie(String sessionCookie) {

    String payload = sessionCookie.split("\\.")[1];

    byte[] encoded_term = Base64.getUrlDecoder().decode(payload.getBytes());

    return new String(encoded_term);
}

Java Output

�tm_csrf_tokenmdTn5KP2ByakJORgYKByxf6gO

What I wonder is; with the Java way, I can fully achieve field name and it's value, but some gibberish values come with them.

Do you know what's the reason for this?

Do I have a chance to get clean output like Elixir way in Java way?

0

There are 0 best solutions below