昨日のだるやなぎ呑み会でちょっと話題になったので調べてみました。
確か、
WindowsストアアプリでCoreTweet使う時に、PINコード使わずに認証するのってどうやったらええん?
みたいな話だったと思います*1。
WebAuthenticationBrokerを使うと簡単に実装できた
コードはこんな感じ。
var apiKey = "{API Key}"; var apiSecret = "{API Secret}"; var callback = "http://127.0.0.1:64003/Account/ExternalLoginCallback"; var uriCallback = new Uri(callback); var oAuthSession = await OAuth.AuthorizeAsync(apiKey, apiSecret , callback); var webAuthenticationResult = await WebAuthenticationBroker.AuthenticateAsync(WebAuthenticationOptions.None, oAuthSession.AuthorizeUri, uriCallback); if (webAuthenticationResult.ResponseStatus == WebAuthenticationStatus.Success) { //http://127.0.0.1:64003/Account/ExternalLoginCallback?oauth_token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&oauth_verifier=YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY var oauthVerifier = webAuthenticationResult.ResponseData.Split('&').First(x => x.Contains("oauth_verifier")).Split('=')[1]; var token = await oAuthSession.GetTokensAsync(oauthVerifier); await token.Statuses.UpdateAsync(status => "テスト"); }
事前準備
事前に Twitter Application Management にてアプリケーションの登録して、APIキー等を取得しておく必要がありますが、その辺は省略します。
認証画面の表示
OAuthSessionインスタンスを取得するのはいつもの感じですね。
WebAuthenticationBrokerのAuthenticateAsyncメソッドに認証用のURLを渡して呼び出すと、下の様なTwitterの認証画面が表示されます。
ここで、アプリケーションの使用を許可してあげればOKです。
認証後の処理
認証に成功したかどうかは webAuthenticationResult.ResponseStatus でわかります。
成功していると webAuthenticationResult.ResponseData に以下の様なURL(Twitter認証後にリダイレクトされるURL)が格納されていますので、oauth_verifierの値をどうにかして取得します*2。
http://127.0.0.1:64003/Account/ExternalLoginCallback?oauth_token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&oauth_verifier=YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
トークンの取得
oauth_verifierの値をOAuthSessionインスタンスのGetTokensAsyncメソッドに渡すと、トークンが取得できます。
所感
WebAuthenticationBroker便利ですね!
実は、Windowsストアアプリ作ったことない(プロジェクト作った事すら、過去10回もないくらい)のですが、おかげでちょっと触れることができました。
聞いてくれただるやなぎさん、ありがとう。