QtQuick の base64url 対応

Qt 勉強会 #34 @Tokyo で試行錯誤をしていた Qt.atob()Qt.btoa()base64url 対応が形になったので Qt 5.8 向けに QByteArray::Base64Option support for Qt.atob and Qt.btoa というパッチを送りました。

Base64url Encoding とは?

先日とあるウェブサービスの Google+ のサインイン対応 をしていた際に JWT 形式のレスポンスを Qt.btoa() でデコードしようとして上手くいかないケースがありました。

通常の Base 64 では A-Z、a-z、0-9 と + と / が使用されますが、+ と / は URL では特別な意味を持つため、別の文字(- と _)を使用するようにし、最後の == もなくしてしまおうという形式で JWT ではこの Base64url Encoding が採用されています。

Qt の Base64url Encoding の対応状況

2013年の秋に「 Base64: Implement the “base64url” encoding and the stripping of ‘=’」というパッチで QByteArray::toBase64QByteArray::fromBase64 で Base64url Encoding に対応していました。

QtQuick を Base64url Encoding に対応しました

QtQml モジュールに含まれる Qt.atob と Qt.btoa は未対応でしたので、「QTBUG-52612: Qt.btoa() and Qt.atob() Base64Option support」という提案をバグトラッカー上に作成し、QByteArray::Base64Option support for Qt.atob and Qt.btoa というパッチを作成しました。

このパッチが取り込まれた暁には以下のようにできるようになります。

property string text: Qt.btoa("lt~1", Qt.Base64UrlEncoding | Qt.OmitTrailingEquals) // bHR-MQ

今後このパッチのレビューが行われ、Qt 5.8 に追加される予定です。Qt のパッチのレビューは誰でもできるようになっているので、協力してくれる方がいましたら是非よろしくお願いします。

おすすめ