2013/12/08

OAuth Example

最近由於正在做 flickr 的 client , 所以稍微實作了一下 OAuth 的部份.

OAuth 認證部份可以透過 http://www.flickr.com/services/api/auth.oauth.html 了解.

以下是實作部份.

最主要部份是上面網址的 2 -> 3, 要怎麼去收到使用者輸入後所得到的 verifier 來取得 access token.

這邊我們使用 scribe 套件.


        OAuthService service = new ServiceBuilder()
                .provider(FlickrApi.class)
                .apiKey(YOUR_API_KEY)
                .apiSecret(YOUR_API_SECRET)
                .callback(CALLBACK_SCHEME)
                .build();

這邊 callback_scheme 可以隨便自己定義, 但記得使用這樣的格式 'xxxx://xxxxx'.
callback 是當使用者輸入他的帳號密碼後, flickr api 會呼叫 callback 所指向的位址.
而我們就可以透過此位址來得到 verifier 以便之後取得 access token.
以下就可以看到回傳的格式, 這樣我們很方便可以透過 Uri 來取得 oauth_verifier
        mWebView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                mProgress.setVisibility(View.VISIBLE);
                mProgress.setIndeterminate(false);
                mProgress.setProgress(0);
            }

            @Override
            public void onPageFinished(final WebView view, String url) {
                mProgress.setVisibility(View.GONE);
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (url == null) {
                    return true;
                }

                if (!url.startsWith(CALLBACK_SCHEME)) {
                    /**
                     * if this is not our callback scheme, just pass it to the webview
                     */
                    view.loadUrl(url);
                    return true;
                }

                //tw.clotai.oauthexample:callback?oauth_token=72157638471772995-ad1973723cfdceb4&oauth_verifier=b0ef999e41547457

                Uri uri = Uri.parse(url);
                String verifier = uri.getQueryParameter("oauth_verifier");
                return true;
            }
        });


這範例很簡單, 主要部份只要注意這邊即可. 其他應該也不用多說.

完整的原始碼: OAuthExample.zip