OAuthSwift ではてなの OAuth を使うときに二重URLエンコードされないようにする正しい方法は?
OAuthSwift を使ってはてなの OAuth 認証を使おうとしています。OAuth の仕様に詳しい方に、この変更が正しいのか伺いたく思います。
サンプルプロジェクト (GitHub) を作って試したところ、最後のアクセストークンを取得するところで 401 で oauth_problem=token_rejected
が返ってきてしまうエラーに悩まされていましたが、
OAuthSwift のソースを追いかけてみると、
OauthSwifthClient.swift
の makeRequest()
の中で最後の request.headers
で oauth_token=\"hogehoge%253D%253D\"
となっており、oauth_verifier
も同様に %253D
が含まれていました。
本来は hogehoge%3D%3D
という文字列が post されなければならないのに '=' が2重にURLエンコードされているのです。
そこで、 OAuthSwift/OAuth1Swift.swift
の postOAuthAccessTokenWithRequestToken
の中でパラメタとして渡される oauth_token
と oauth_verifier
を、先に .stringByRemovingPercentEncoding
することで一旦 URL エンコードを解除するという変更をしました (commit eca80d176725c25c4a36df8b6e775f48d35f405f)。
するとうまく OAuth 認証が通るようになりました。
OAuth の正しい方法として、この変更でよいのでしょうか?