Oauth工作原理
什么是Oauth
官方網(wǎng)站
1.Oauth是一種安全認(rèn)證的協(xié)議
2.Oauth協(xié)議為用戶資源的授權(quán)提供了一個(gè)安全的诉探、開(kāi)發(fā)而又簡(jiǎn)易的標(biāo)準(zhǔn)
3杯矩、Oauth的授權(quán)不會(huì)使第三方觸及到用戶的帳號(hào)信息(例如用戶名和密碼)
Oauth當(dāng)中的角色
- Service Provider 服務(wù)提供商 例如QQ facebook 老大
- User用戶 使用我們程序的人
- Consumer 客戶 我們所開(kāi)發(fā)的程序
- Protected Resources 被保護(hù)的資源 照片胶哲、文檔踏揣、私人信息 **
Oauth驗(yàn)證流程
Oauth驗(yàn)證
詳細(xì)流程
Oauth認(rèn)證
- Oauth認(rèn)證步驟
Oauth認(rèn)證步驟
- Oauth認(rèn)證URL
與Oauth相關(guān)的URL (不同開(kāi)放平臺(tái)的URL地址不一樣)
1.Request Token URL:獲取未授權(quán)的Request Token的服務(wù)地址
2.User Authorization URL:獲取用戶授權(quán)的Request Token服務(wù)地址
3.Access Token URL:使用用戶授權(quán)后的Request Token 換取Access Token 的服務(wù)地址
- 加密算法
** 哈希输硝、單向 **
** 原文 - > 算法 -> 密文 ** -
請(qǐng)求簽名方法
客戶發(fā)送數(shù)字簽名
服務(wù)器提供商獲得簽名
oauth-signpost 項(xiàng)目
https://code.google.com/p/oauth-signpost/
下載地址:https://code.google.com/p/oauth-signpost/downloads/list
建立項(xiàng)目柬采,導(dǎo)入jar包
在Constants類中寫(xiě)入所需的各種常量
public class Constants {
public static final String CONSUMER_KEY = "99e9494ff07e42489f4ace16b63e1f47";
public static final String CONSUMER_SECRET = "154f6f9ab4c1cf527f8ad8ab1f8e1ec9";
public static final String REQUEST_URL = "https://open.t.qq.com/cgi-bin/request_token";
public static final String ACCESS_URL = "https://open.t.qq.com/cgi-bin/access_token";
public static final String AUTHORIZE_URL = "https://open.t.qq.com/cgi-bin/authorize";
public static final String ENCODING = "UTF-8";
}
PrepareRequestTokenActivity中創(chuàng)建consumer和provider
import oauth.signpost.OAuthConsumer;
import oauth.signpost.OAuthProvider;
import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer;
import oauth.signpost.commonshttp.CommonsHttpOAuthProvider;
import android.app.Activity;
import android.os.Bundle;
public class PrepareRequestTokenActivity extends Activity {
//代表我們開(kāi)發(fā)的應(yīng)用程序
private OAuthConsumer consumer;
//代表應(yīng)用提供商
private OAuthProvider provider;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
consumer = new CommonsHttpOAuthConsumer(Constants.CONSUMER_KEY, Constants.CONSUMER_SECRET);
provider = new CommonsHttpOAuthProvider(Constants.REQUEST_URL, Constants.ACCESS_URL, Constants.AUTHORIZE_URL);
//異步任務(wù)
new OAuthRequestTokenTask(this, consumer, provider).execute();
}
}
OAuthRequestTokenTask類
import oauth.signpost.OAuthConsumer;
import oauth.signpost.OAuthProvider;
import android.content.Context;
import android.os.AsyncTask;
public class OAuthRequestTokenTask extends AsyncTask<Void, Void, Void>{
private Context context;
private OAuthConsumer consumer;
private OAuthProvider provider;
public OAuthRequestTokenTask(Context context, OAuthConsumer consumer,
OAuthProvider provider) {
super();
this.context = context;
this.consumer = consumer;
this.provider = provider;
}
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
try {
System.out.println("請(qǐng)求Request Token之前" + consumer.getToken());
final String url = provider.retrieveRequestToken(consumer, "null");
System.out.println("請(qǐng)求Request Toker之后" + consumer.getToken());
System.out.println("url---->" + url);
} catch(Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}