Oauth工作原理
什么是Oauth
官方网站
1.Oauth是一种安全认证的协议
2.Oauth协议为用户资源的授权提供了一个安全的、开发而又简易的标准
3、Oauth的授权不会使第三方触及到用户的帐号信息(例如用户名和密码)
Oauth当中的角色
- Service Provider 服务提供商 例如QQ facebook 老大
- User用户 使用我们程序的人
- Consumer 客户 我们所开发的程序
- Protected Resources 被保护的资源 照片、文档、私人信息 **
Oauth验证流程
Oauth验证 详细流程Oauth认证
- Oauth认证步骤
- Oauth认证URL
与Oauth相关的URL (不同开放平台的URL地址不一样)
1.Request Token URL:获取未授权的Request Token的服务地址
2.User Authorization URL:获取用户授权的Request Token服务地址
3.Access Token URL:使用用户授权后的Request Token 换取Access Token 的服务地址
- 加密算法
** 哈希、单向 **
** 原文 - > 算法 -> 密文 ** -
请求签名方法
客户发送数字签名
oauth-signpost 项目
https://code.google.com/p/oauth-signpost/
下载地址:https://code.google.com/p/oauth-signpost/downloads/list
在Constants类中写入所需的各种常量
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中创建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 {
//代表我们开发的应用程序
private OAuthConsumer consumer;
//代表应用提供商
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);
//异步任务
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("请求Request Token之前" + consumer.getToken());
final String url = provider.retrieveRequestToken(consumer, "null");
System.out.println("请求Request Toker之后" + consumer.getToken());
System.out.println("url---->" + url);
} catch(Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
网友评论