190307 JWT Authentication
JWT 的架構如下。
[Header].[Payload].[Signature]
Server 端拿到 Token 後,先驗證 Token 的正確性。
[Signature] = Base64Url( encrypt( [Header].[Payload] ))
-------------------------------------------------------------------------
確認 [Signature] 未被更改後,再來就是檢查是否超過規定時間。
在拆解 Token 時,會用到 Regular Expression。
JWT 是由點(.)將 Header, Payload 與 Signature 串接在一塊。
但點(.)在正規表示法中是保留字元。
所以使用 Java 的 String 的 split 拆解 Token 時,必須用反斜線(\)來知會正規表示法的 Parser 將點(.)視為字元而非正規表示法規則的一部份。
但 Back Slash (\) 在 Java 中為跳脫字元。
所以當在 Java 中要使用點(.)做為正規表示法中的字元來拆解字串時,則必須將其表示為下面這樣。
string.split( "\\." ) ;
-------------------------------------------------------------------------
Java EE 中要讀取既有的 JSON,可使用 javax.json.Json 類別。
可透過 InputStream 或 Read 來建立 JsonReader 物件。
前面談到的 Token,經由 Base64 URL Decoder 解碼所拿到的 byte array 我們就可直接使用 ByteArrayInputStream 來建立 JsonReader。
[Header].[Payload].[Signature]
Server 端拿到 Token 後,先驗證 Token 的正確性。
[Signature] = Base64Url( encrypt( [Header].[Payload] ))
-------------------------------------------------------------------------
確認 [Signature] 未被更改後,再來就是檢查是否超過規定時間。
在拆解 Token 時,會用到 Regular Expression。
JWT 是由點(.)將 Header, Payload 與 Signature 串接在一塊。
但點(.)在正規表示法中是保留字元。
所以使用 Java 的 String 的 split 拆解 Token 時,必須用反斜線(\)來知會正規表示法的 Parser 將點(.)視為字元而非正規表示法規則的一部份。
但 Back Slash (\) 在 Java 中為跳脫字元。
所以當在 Java 中要使用點(.)做為正規表示法中的字元來拆解字串時,則必須將其表示為下面這樣。
string.split( "\\." ) ;
-------------------------------------------------------------------------
Java EE 中要讀取既有的 JSON,可使用 javax.json.Json 類別。
可透過 InputStream 或 Read 來建立 JsonReader 物件。
前面談到的 Token,經由 Base64 URL Decoder 解碼所拿到的 byte array 我們就可直接使用 ByteArrayInputStream 來建立 JsonReader。
留言
張貼留言