質問: 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 の正しい方法として、この変更でよいのでしょうか?
回答: OAuth1 exchange fails due token secret being URL encoded. · Issue #140 · OAuthSwift/OAuthSwift おそらく上のIssueでの修正漏れですね。ここでの修正に従うなら `self.client.credential` の中身はURLエンコードされていない文字列になるべきですが、Authorization時のコールバックでクエリストリングをURLデコードせずに `self.client.credential` に格納してしまっているようです。 ですから `postOAuthAccessTokenWithRequestToken` までにURLデコードすること自体は間違っていませんが、前述のハンドラ関数の中でデコードしてから格納するようにした方がよいと思います。 (手元にSwiftの開発環境ないですし、IssueやPullRequestの投稿は遠慮しておきます)