编写微博客户端,最重要的就是用户授权方法。现在主流SNS社区开放API后,基本都采用OAuth认证进行授权。本文主要记录新浪微博1.0a版本的OAuth认证。但是随着2.0版本的逐渐普及,会在今后的加入2.0版本的方法。
有关OAuth认证的理论及相应流程在这里不做过多追述,各大网站上都已经写的十分清晰,这里主要写下我自己的实现方法。对于OAuth认证,这里采用signpost-oauth开源项目。
首先编写一个类,用于存储认证过程中需要用到基本信息。
public class SinaConstant {// 新浪OAuth辅助信息类
// 所分配的APP_KEY
public static final String CONSUMER_KEY = "";
// 所分配的APP_SECRET
public static final String CONSUMER_SECRET = "";
// 用于获取未授权的request token
public static final String REQUEST_URL = "http://api.t.sina.com.cn/oauth/request_token";
// 用于获取access token
public static final String ACCESS_URL = "http://api.t.sina.com.cn/oauth/access_token";
// 用于对未授权的request token进行授权
public static final String AUTHORIZE_URL = "http://api.t.sina.com.cn/oauth/authorize";
// 回调地址
public static final String OAUTH_CALLBACK_URL = "mysina://CallActivity";
}
注:1、其中回调地址用于指向从新浪页面授权后跳转到页面;2、对应的key和secret填写新浪微博对应提供的app_key及app_secret
建立一个Activity用于进行添加账号的操作。将改Activity设置为单例模式
<activity
android:label="@string/app_name"
android:launchMode="singleInstance" android:name=".AddUserActivity" >
<intent-filter >
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="CallActivity"
android:scheme="mysina" />
</intent-filter>
</activity>
注:1、android:launchMode="singleInstance"将该Activity设置为单例;2、data标签与SinaConstant类中的回调地址对应,用于从浏览器回传值时呼出该Activity
建立AddUserActivity,对应代码如下:
public class AddUserActivity extends Activity {
/** Called when the activity is first created. */
Context context;
private OAuthConsumer sinaconsumer;
private OAuthProvider sinaprovider;
private OAuthRequestToken oauthtool;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.usermanager);
sinaconsumer = new CommonsHttpOAuthConsumer(SinaConstant.CONSUMER_KEY,SinaConstant.CONSUMER_SECRET);//初始化用于OAuth认证的Consumer对象
sinaprovider = new CommonsHttpOAuthProvider(SinaConstant.REQUEST_URL,SinaConstant.ACCESS_URL, SinaConstant.AUTHORIZE_URL);//初始化用于OAuth认证的Provider对象
ImageButton adduser = (ImageButton) findViewById(R.id.addUserImage);this.context = this;
adduser.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
System.out.println("OAuth认证新浪");
oauthtool = new OAuthRequestToken(context, sinaconsumer,sinaprovider);
oauthtool.execute();
}
});
}
protected void onNewIntent(Intent intent) {//AddUserActivity为单例,再第二次开启时加载该方法
super.onNewIntent(intent);
Uri uri = intent.getData();
String verifier = null;
verifier = uri.getQueryParameter(OAuth.OAUTH_VERIFIER);
try {
sinaprovider.setOAuth10a(true);//设置OAuth版本号
sinaprovider.retrieveAccessToken(sinaconsumer, verifier);//通过服务器返回的Verifier去获取账号对应的Token
SortedSet<String> user_ids = sinaprovider.getResponseParameters().get("user_id");
String user_id = user_ids.first();
String Token= sinaconsumer.getToken();
String TokenSecret = sinaconsumer.getTokenSecret();
System.out.println(userKey + "&*&" + userSecret);
} catch (Exception e) {
e.printStackTrace();
}
}
注:1、在OnNewIntent方法中,sinaprovider.retrieveAccessToken()需要与网路交互,最好采取异步操作,本代码中忽略,异步方法可以参考在onClickListener监听中的OAuthRequestToken。
我们可以在上面的代码中看到,我们已经获取到相应的Token及TokenSecret了。通过这2个值,我们技能对授权账号进行操作,获取账号信息,发送微博,获取微博,更新资料等。
在第一步认证中,用到了一个异步类OAuthRequestToken,代码如下 :
public class OAuthRequestToken extends AsyncTask<String, Void, String> {
private OAuthConsumer consumer;
private OAuthProvider provider;
private Context context;
private ProgressDialog pd;
public OAuthRequestToken(Context context, OAuthConsumer consumer,
OAuthProvider provider) {
this.context = context;
this.consumer = consumer;
this.provider = provider;
}
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
// if(type.equalsIgnoreCase("sina")){
try {
Uri uri = null;
// retrieveRequestToken的第二个参数是回调URL
final String url = provider.retrieveRequestToken(consumer,SinaConstant.OAUTH_CALLBACK_URL);
System.out.println(consumer.getToken());
uri = Uri.parse(url);
context.startActivity(new Intent(Intent.ACTION_VIEW, uri));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
return "success";
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
pd.dismiss();
if(result == null){
Toast.makeText(context, "网络异常,请稍后重试", Toast.LENGTH_LONG).show();
}
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
pd = new ProgressDialog(context);
pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pd.setMessage("正在加载");
pd.show();
}
}
OAuth认证,在本文中是通过调用系统浏览器到新浪微博指定地址进行授权,如果使用UCWeb之类的浏览器可能会出现无法回调的异常。所以建议使用WebView来实现授权页面。相应的方法会在后面写到。
分享到:
相关推荐
适用于Android的AppAuth是用于与和提供程序进行通信的客户端SDK。 它努力遵循那些惯用的实现语言样式,直接映射那些规范的请求和响应。 除了映射原始协议流外,便捷方法还可用于协助执行常见任务,例如使用新令牌...
腾讯微博Android客户端开发使用OAuth 1.0A版本进行用户授权,以确保用户在使用非官方客户端时,不会直接暴露QQ号和密码,降低安全风险。 OAuth的核心思想是通过令牌(Token)机制来实现授权,而不是直接使用用户名...
在Android开发中,网络编程是不可或缺的一部分,而OAuth2是一种广泛使用的授权协议,它为安全地访问第三方资源提供了便利。本教程将详细讲解如何在Android应用中使用OkHttp实现OAuth2客户端,以便与服务器进行安全的...
Java的oauth2.0 服务端与客户端的实现.zip 封装了oauth2.0的基本架构和实现,对照我的博客http://blog.csdn.net/jing12062011/article/details/78147306使用该源码。 下载项目压缩包,解压,里面两个maven项目:...
OAuth认证涉及两个主要角色:服务器端(也称为资源服务器)和客户端。 **OAuth认证服务器端**: OAuth服务器端是拥有用户资源的服务提供者,如社交网络或邮件服务。当用户想要授权第三方应用访问其在服务器端的资源...
本文将深入探讨OAuth认证的核心概念,并结合Android开发实践,解析源码示例,帮助你掌握这一关键技能。 **OAuth认证流程** 1. **用户授权**: 用户打开应用,应用请求用户授权访问其在特定服务(如新浪)上的信息。...
在Android平台上开发新浪微博客户端是一项复杂而有趣的任务,它涉及到多个技术层面和开发流程。下面将详细探讨这个过程中涉及的关键知识点。 1. **Android SDK**:首先,开发Android应用需要掌握Android SDK,它是...
在Android平台上开发应用程序时,与各种在线服务进行交互是一个常见的需求。腾讯微博作为一个热门的社交媒体平台,提供了API供开发者接入其服务,实现如发布、阅读微博等功能。在使用这些功能时,通常需要进行OAuth...
`aaronpk-oauth.net-2e34467` 这个文件可能是一个特定OAuth实现的源码仓库,可能包含了OAuth2的客户端或服务器端的实现代码。通过阅读和分析这个源码,我们可以更深入地了解OAuth协议的具体实现细节,包括令牌的生成...
在提供的压缩包中,包含两个Maven项目,一个是`oauthserver`,代表了OAuth 2.0的服务端,另一个是`oauthclient01`,代表了客户端。 ### 1. OAuth 2.0 服务端(oauthserver) 服务端是OAuth协议的核心,负责验证...
3./class/下,文件名中含有If的文件,定义的是接口.总计3个接口文件:各个网站的api访问路径(urlIf)、申请到的appkey接口(keyIf),返回的参数名接口(paramIf)。...本例中的OAuth客户端来源于新浪微博OAuth认证SDK。
4. **代码实现**:Android或Web开发中的OAuth认证代码示例,包括请求和解析API响应,管理令牌等。 5. **安全注意事项**:在处理用户授权时应考虑的安全措施,如如何存储和保护令牌,避免令牌被盗用。 6. **...
C#是Microsoft开发的一种面向对象的编程语言,广泛应用于Web应用开发,包括OAuth认证。对于初学者来说,理解并实现OAuth认证流程在C#中是非常重要的一步。 OAuth认证通常涉及到四个主要角色:资源所有者(Resource ...
OAuth认证在Android开发中是一个重要的知识点,特别是在移动应用与第三方服务集成时,如社交媒体登录、云存储服务等。OAuth允许用户授权第三方应用访问其私有资源,而无需分享用户名和密码,增强了安全性。本示例是...
在这个"1.OAuth认证学习.rar"压缩包文件中,我们主要会探讨OAuth在腾讯微博Android客户端开发中的应用。 OAuth的核心理念是分离授权与身份验证。它允许用户将某些权限授予第三方应用,例如发布微博,而无需直接向...
新浪、腾讯、网易、搜狐微薄OAuth认证整合Android版
OAuth2 是一个授权框架,广泛应用于现代Web应用和API的安全性设计,允许第三方应用在用户许可的情况下访问受保护的资源。本套系统包含了授权服务器、资源服务器和客户端,旨在实现安全的单点登录(Single Sign-On, ...
4. 实践创建一个简单的OAuth客户端,模拟整个授权流程。 5. 研究不同OAuth流型(如授权码流、隐式流、密码流、客户端凭据流)的区别和应用场景。 通过这个学习过程,你将能够掌握OAuth的核心概念,并具备在实际项目...