OAuth2認證介紹,oauth2認證

來源:互聯網
上載者:User

OAuth2認證介紹,oauth2認證

1.OAuth2認證簡介
(1)OAuth2認證原理圖:

2)簡介:OAuth2(開放授權)是一個開放標準,允許使用者讓第三方應用訪問該使用者在某一網站上儲存的私密的資源(如照片,視頻,連絡人清單),而無需將使用者名稱和密碼提供給第三方應用。

(3)為什麼使用OAuth2認證:防止第三方應用獲得使用者名稱和密碼,在網頁中完成認證。另外
使用https請求,防止抓包泄密。即使抓包獲得了使用者和密碼,也是經過加密的,很難破解。
通過OAuth2認證最終可以獲得token,然後通過token可以調用第三方平台提供的介面,實現需要的功能。
但若token儲存在本地的話,需要加密,防止被竊取,泄露使用者資訊。

2.OAuth2認證的實際應用

獲得新浪微博授權認證的流程:

(1)在新浪開放平台上建立應用,獲得appkey、appsecret和回調地址
(2)在測試機上安裝MD5簽名產生工具 產生md5密鑰 或在eclipse preference->build中查看當前keystore檔案的md5值
並在開放平台的應用中填寫
(3)如果應用未審核通過, 需要在開放平台測試資訊裡添加測試帳號, 只有測試帳號才能成功提供者

新浪微博OAuth2認證 實現發微博功能代碼:
主類:

public class MainActivity extends Activity {    private int SEND_WEIBO=1;    /** 注意:SsoHandler 僅當 SDK 支援 SSO 時有效 */    private SsoHandler mSsoHandler;    /** 微博 Web 授權類,提供登陸等功能 */    private WeiboAuth mWeiboAuth;    /** 封裝了 "access_token","expires_in","refresh_token",並提供了他們的管理功能 */    private Oauth2AccessToken mAccessToken;    private HttpUtils httpUtils=new HttpUtils();    private Handler handler=new Handler(){        public void handleMessage(android.os.Message msg) {            if(msg.what==SEND_WEIBO)            {                RequestCallBack<String> callBack=new RequestCallBack<String>() {                    @Override                    public void onSuccess(ResponseInfo<String> responseInfo) {                        // TODO Auto-generated method stub                        Toast.makeText(MainActivity.this, "發微博成功", Toast.LENGTH_SHORT).show();                    }                    @Override                    public void onFailure(HttpException error, String msg) {                        Toast.makeText(MainActivity.this, "發微博失敗", Toast.LENGTH_SHORT).show();                    }                };                try {                    InputStream is=getAssets().open("a.jpg");                    File file=new File(Environment.getExternalStorageDirectory()+"/a.jpg");                    if(!file.exists())                    {                        file.createNewFile();                    }                    FileOutputStream out=new FileOutputStream(file);                    byte []buffer=new byte[1024];                    int len=0;                    while( (len=is.read(buffer)) !=-1)                    {                        out.write(buffer, 0, len);                    }                    out.close();                    is.close();                    if(file!=null && file.length()>0)                    {                        RequestParams params=new RequestParams();                        params.addBodyParameter("status", "測試案例");                        params.addBodyParameter("source", "3680529134");                        params.addBodyParameter("access_token", mAccessToken.getToken());                        params.addBodyParameter("pic", file);                        httpUtils.configTimeout(3000);                        httpUtils.send(HttpMethod.POST, "https://upload.api.weibo.com/2/statuses/upload.json", params, callBack);                    }                } catch (IOException e) {                    e.printStackTrace();                }//              httpUtils.configTimeout(3000);                //httpUtils.send(HttpMethod.POST, "https://upload.api.weibo.com/2/statuses/upload.json", params, callBack);            }        };    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        // 建立微博執行個體        mWeiboAuth = new WeiboAuth(this, Constants.APP_KEY,                Constants.REDIRECT_URL, Constants.SCOPE);        Button btnLogin = (Button) findViewById(R.id.btn_sso);        btnLogin.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                mSsoHandler = new SsoHandler(MainActivity.this, mWeiboAuth);                mSsoHandler.authorize(new AuthListener());            }        });    }    /**     * 當 SSO 授權 Activity 退出時,該函數被調用。     *      * @see {@link Activity#onActivityResult}     */    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        // SSO 授權回調        // 重要:發起 SSO 登陸的 Activity 必須重寫 onActivityResult        if (mSsoHandler != null) {            mSsoHandler.authorizeCallBack(requestCode, resultCode, data);            Toast.makeText(this, "認證 成功"+mAccessToken.getToken(), Toast.LENGTH_SHORT).show();            handler.sendEmptyMessage(SEND_WEIBO);        }    }    /**     * 微博認證授權回調類。 1. SSO 授權時,需要在 {@link #onActivityResult} 中調用     * {@link SsoHandler#authorizeCallBack} 後, 該回調才會被執行。 2. 非 SSO     * 授權時,當授權結束後,該回調就會被執行。 當授權成功後,請儲存該 access_token、expires_in、uid 等資訊到     * SharedPreferences 中。     */    class AuthListener implements WeiboAuthListener {        @Override        public void onComplete(Bundle values) {            // 從 Bundle 中解析 Token            mAccessToken = Oauth2AccessToken.parseAccessToken(values);            if (mAccessToken.isSessionValid()) {                // 顯示 Token                Log.d("Test", "token=" + mAccessToken.getToken());            }        }        @Override        public void onCancel() {            Toast.makeText(MainActivity.this, "認證取消", Toast.LENGTH_LONG).show();        }        @Override        public void onWeiboException(WeiboException e) {            Toast.makeText(MainActivity.this,                    "Auth exception : " + e.getMessage(), Toast.LENGTH_LONG)                    .show();        }    }}

項目:
http://download.csdn.net/detail/aehaojiu/8609659
需要用到xUtils開源項目:
http://download.csdn.net/detail/aehaojiu/8610323

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.