标签: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
标签:oauth2
原文地址:http://blog.csdn.net/aehaojiu/article/details/45131379