發表文章

目前顯示的是 五月, 2014的文章

讓 git diff 顯示 utf-16 (或其它binary) 檔案的差異

兩種作法: 透過 difftoolunicode - Can I make git recognize a UTF-16 file as text? - Stack Overflow$ git difftool commit1 commit2 我直接跑 difftool, 沒設定的情況會問我要不要用 vimdiff。 用 textconvTextconv - Git SCM Wiki 這個作法比較好, 適用 git diff, show, blame。 比方說對於 iOS L10N 的檔案, 可以這麼設: 編輯 PROJECT/.git/info/attributes: 加入 *.strings diff=localizablestrings 編譯 /.gitconfig: 加入 [diff "localizablestrings"] textconv = "iconv -f utf-16 -t utf-8"

使用 OAuth2 refresh token 的好處

初次看到 refresh token, 想說這東西真礙事, 原本 OAuth2 基本的流程已將使用者的密碼和授權分離, 看起來很完美了, 為什麼授權的 access token 之外, 還要多一個 refresh token? 看了 security - Why Does OAuth v2 Have Both Access and Refresh Tokens? 才明白 refresh token 更進一步提升安全性。 access token 解決了: 使用者不需告訴應用程式密碼 使用者可以細分授權項目 使用者可隨時撤消授權 當 access token 外洩的時候, 只要使用者立即撤消授權, 就可以中止傷害, 相較於修改密碼方便許多 (一組密碼可能用在一到多個帳號上, 甚至可能忘了那些帳號使用同一密碼)。 但是為了減少使用者的認證的麻煩, 一個 access token 通常會授權使用很長一段時間 (比方說一個月)。使用者不容易知道什麼時候發出去的 access token 外洩了, 傷害期可能會太長。外洩的原因可能是使用 access token 取存服務時被竊聽破解, 或是在裝置端的應用程式 (PC、smartphone) 存放的 access token 直接外洩。 有沒有辦法可以兼顧減少使用者認證, 又降低 access token 外洩的傷害期呢? 答案是加上 refresh token。設定授權的 access token 在很短的時間內會過期 (如一小時), 然後 client(應用程式) 要用 refresh token + client id + client secret 取得新的 access token。 client 不需要透過使用者就可以取得新的 access token, 不會打擾到使用者。沒有 client secret 的情況下, 單是外洩 access token, 別人用一小段時間後, token 就過期了, 傷害時間很短。 不過要達到上面的好處, client 必須在不同地方存下 refresh token 和 client secret, 偷懶存在同一地方, 一但破台也是一樣。 security - Why Does OAuth v2 Have Both Access and Refresh Tokens?