雑記 - otherwise

最近はDQ10しかやっていないダメ技術者がちまちまと綴る雑記帳

ReactiveOAuth ではてなの OAuth 認証を利用するお話し

個人的にも近い将来はてな OAuth を利用する予定があったので調べてみました。
twitter でもつぶやきましたが、


と云う事の様です。
最終的には @neuecc さんに ReactiveOAuth 自体を修正していただくのが良いとは思いますが、とりあえず利用者側で暫定対応するならこんな感じでいけるかと。

var authorizer = new OAuthAuthorizer(ConsumerKey, ConsumerSecret);
authorizer.GetRequestToken("https://www.hatena.com/oauth/initiate", new Parameter("oauth_callback", "oob"))
    .Select(res => res.Token)
    .ObserveOnDispatcher()
    .Subscribe(token =>
    {
        requestToken = new RequestToken(UrlDecode(token.Key), UrlDecode(token.Secret));
        var url = authorizer.BuildAuthorizeUrl("https://www.hatena.ne.jp/touch/oauth/authorize", token);
        webBrowser1.Navigate(new Uri(url));
    });

※ OAuthAuthorizer.BuildAuthorizeUrl(string, RequestToken) はトークンをエンコードせずに URL 構築するので、デコードしていないトークンを引き渡す必要があります。。。

  • UrlDecode メソッド
private string DecodeUrl(string stringToUnescape)
{
    return Uri.UnescapeDataString(stringToUnescape.Replace("%29", ")")
                                                  .Replace("%28", "(")
                                                  .Replace("%27", "'")
                                                  .Replace("%2A", "*")
                                                  .Replace("%21", "!"));
}