问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于OAuth1.0和OAuth2.0在认证上的不同,哪个大神告诉我一声啊

发布网友 发布时间:2022-05-02 06:05

我来回答

2个回答

懂视网 时间:2022-05-04 05:49

下载地址~ http://download.csdn.net/detail/zhangnianxiang/4375685 新浪微博 曾经@微博API 新浪那边表示 旧版的Oauth 1.0a将在不久的2012.9.1号停止。这个是一个很苦的消息。意味着涉及微博的都要修改。 Oauth2.0相比较于Oauth1.0的话 流程少了很多,其中

下载地址~

http://download.csdn.net/detail/zhangnianxiang/4375685



新浪微博

曾经@微博API 新浪那边表示 旧版的Oauth 1.0a将在不久的2012.9.1号停止。这个是一个很苦逼的消息。意味着涉及微博的都要修改。

Oauth2.0相比较于Oauth1.0的话 流程少了很多,其中一点就是签名。之前都是用signpost这个开源项目辅助。现在完全可以去掉了


好吧。废话不说了。

新浪微博Oauth2.0认证的官方说明

http://open.weibo.com/wiki/Oauth2


简单步骤:1获取code 2获取accessToken 3使用accessToken访问api

新浪的这份授权机制还是比较详细。理解起来比较容易

接口 说明
OAuth2/authorize 请求用户授权Token
OAuth2/access_token 获取授权过的Access Token
OAuth2/get_oauth2_token OAuth1.0的Access Token更换至OAuth2.0的Access Token

步骤1http://open.weibo.com/wiki/Oauth2/authorize

获取code

请求参数

必选 类型及范围 说明
client_id true string 申请应用时分配的AppKey。
redirect_uri true string 授权回调地址,站外应用需与设置的回调地址一致,站内应用需填写canvas page的地址。
response_type false string 返回类型,支持code、token,默认值为code。
state false string 用于保持请求和回调的状态,在回调时,会在Query Parameter中回传该参数。
display false string 授权页面的终端类型,取值见下面的说明。


https://api.weibo.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI

值得注意的是这边的redirect_uri 必须与 申请的应用那边设置(高级设置里面)的回调地址一致。否则就会出现 error:redirect_uri_mismatch.
这是网页载入授权界面,用户填完账号密码之后按下确定 服务器将返回一个“回调地址+code=xxxxx”的URL(如果是腾讯微博还有openid和openkey等等) 把code是步骤2的关键
步骤2 获取accessToken
API https://api.weibo.com/oauth2/access_token
将code等参数 以POST传给服务器将返回
 {
 "access_token": "ACCESS_TOKEN",
 "expires_in": 1234,
 "remind_in":"798114",
 "uid":"12341234"
 }

这些数据都是要做数据持久化管理的。 腾讯微博返回稍有不同,但是并不影响
步骤3 访问API


研究中遇到的一些问题 1.腾讯微博 那群脑残的腾讯微博把appke和secret变成 ClientID和ClientSecret
oAuth.setClientId(StatcParame.T_CONSUMER_KEY);
oAuth.setClientSecret(StatcParame.T_CONSUMER_SECRET);
下面直接贴源码了
1 sina webview承载授权页面的设置
		web=(WebView)findViewById(R.id.web);
		web.getSettings().setJavaScriptEnabled(true);
		web.getSettings().setSupportZoom(true);
		web.getSettings().setBuiltInZoomControls(true);
		web.setWebViewClient(new WebViewC()); 
WebviewClient
class WebViewC extends WebViewClient{
		@Override
 public void onPageStarted(WebView view, String url, Bitmap favicon) {
	 super.onPageStarted(view, url, favicon);
	 Log.v("aaa", "===onPageStarted==="+url);
			 if(url.contains("code=")){
					try {
						Intent intent = new Intent(Oauth2Activity.this,MainActivity.class);
					 	Uri uri = Uri.parse(url);
						String code = uri.getQueryParameter("code");
						String openid =uri.getQueryParameter("openid");
						String openkey=uri.getQueryParameter("openkey");
						editor.putString(StatcParame.T_OPEN_ID, openid);
						editor.putString(StatcParame.T_OPEN_KEY, openkey);
						HttpClient httpclient=MyCountHttpClient.getNewHttpClient();
						URI accessToken = null;
						List parameters=new ArrayList();
						//必须编码,否则无法向服务器发送微博
						if(codeFlag==1){
							parameters.add(new BasicNameValuePair("client_id", StatcParame.S_CONSUMER_KEY));
							parameters.add(new BasicNameValuePair("client_secret", StatcParame.S_CONSUMER_SECRET));
							parameters.add(new BasicNameValuePair("redirect_uri", StatcParame.S_CALLBACK));
							
							accessToken = URI.create(StatcParame.S_API_access_token);
							intent.putExtra("mode", 1);
						}else if(codeFlag ==2){
							parameters.add(new BasicNameValuePair("client_id", StatcParame.T_CONSUMER_KEY));
							parameters.add(new BasicNameValuePair("client_secret", StatcParame.T_CONSUMER_SECRET));
							parameters.add(new BasicNameValuePair("redirect_uri", StatcParame.T_CALLBACK));
							
							accessToken = URI.create(StatcParame.T_API_access_token);
							
							intent.putExtra("mode", 2);
						}
						parameters.add(new BasicNameValuePair("grant_type", "authorization_code"));
						parameters.add(new BasicNameValuePair("code", code));
						
						
						HttpPost post=new HttpPost(accessToken);
						HttpResponse response=null;
				
						post.setEntity(new UrlEncodedFormEntity(parameters ,HTTP.UTF_8) );
						post.getParams().setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, false);
						
						 response = httpclient.execute(post);
						 if(codeFlag==1){
							 JSON.GetOauth(sharedpre,Utils.getResponseText(response));
						 }else if(codeFlag==2){
							 String tempUrl = StatcParame.T_CALLBACK+"?"+Utils.getResponseText(response);
							 Uri temp = Uri.parse(tempUrl);
							 String access_token = temp.getQueryParameter("access_token");
							 String expires_in=temp.getQueryParameter("expires_in");
							 String name=temp.getQueryParameter("name");
							 editor.putString(StatcParame.T_ACCESS_TOKEN, access_token);
							 editor.putString(StatcParame.T_EXPIRES_IN, expires_in);
							 editor.putString(StatcParame.T_NAME, name);
							 editor.commit();
						 }
						 startActivity(intent);
						 Oauth2Activity.this.finish();
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
			 }
 }
	}

这个方法集合了sina和tencent的处理

这步走完就拿到ACCESSTOKEN了


下面贴个发布微博的方法


SINA发送一个带图片的微博

Weibo weibo = Weibo.getInstance();
			AccessToken accessToken = new AccessToken(shared.getString(StatcParame.S_ACCESS_TOKEN, ""), StatcParame.S_CONSUMER_SECRET);
			accessToken.setExpiresIn(shared.getString(StatcParame.S_EXPIRES_IN, ""));
			weibo.setAccessToken(accessToken);
			weibo.setupConsumerConfig(StatcParame.S_CONSUMER_KEY, StatcParame.S_CONSUMER_SECRET);
			weibo.setRedirectUrl("http://www.sina.com.cn");

			try {
				String msg = URLEncoder.encode(body, HTTP.UTF_8);
			
			 WeiboParameters bundle = new WeiboParameters();
			 bundle.add("status", msg);
			 bundle.add("pic", "/sdcard/1.jpg");
			 String rlt = "";
			 String url = Weibo.SERVER + "statuses/upload.json";
			 
			 Utility.setAuthorization(new Oauth2AccessTokenHeader());
			 rlt = weibo.request(context, url, bundle, Utility.HTTPMETHOD_POST, weibo.getAccessToken());

				Toast.makeText(context, rlt, 1000).show();
				Log.v("aaa","Successfully upload the status to ["+ rlt+ "].");
					return "OK";
			} catch (Exception e1) {
				e1.printStackTrace();
			}


TENCent发送一条微博

OAuthV2 oAuth =new OAuthV2();
		oAuth.setAccessToken(shared.getString(StatcParame.T_ACCESS_TOKEN, ""));
		oAuth.setOauthVersion("2.a");
		oAuth.setClientIP("117.25.173.11");
		oAuth.setOpenid(shared.getString(StatcParame.T_OPEN_ID, ""));
		oAuth.setOpenkey(shared.getString(StatcParame.T_OPEN_KEY, ""));
		oAuth.setClientId(StatcParame.T_CONSUMER_KEY);
		oAuth.setClientSecret(StatcParame.T_CONSUMER_SECRET);
		

		try {
			TAPI api = new TAPI("2.a");
			String respone = api.add(oAuth, "json","abcc","117.25.173.11","","","0");
			Toast.makeText(context, respone, 1000).show();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}


源码之后上传。

联系 zhangnianxiang@gmail.com


热心网友 时间:2022-05-04 02:57

2.0给人感觉完善点,其中分为按照1.0方法验证的,有隐式的只返回access_token还有一种显式的好像,建议直接根据官方api的实例改来用,加密发送那些它都全包了……很方便的。。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
蒙牛为什么卖给中粮 只知道名字怎么找人的联系方式 谁能告诉我怎么在微博上找人啊? 新浪微博怎么找人啊? 雅思裸考一般能考多少分 高热病人应如何护理 检疫性有害生物 多少种 北半球气温最高和最低的月份分别为 北半球气温最高和最低的月份 一起又看流星雨中有一首歌歌词是:为什么你会出现在我的身边_百度... 房易贷是与哪个银行合作的啊,会存管成功吗? 家庭房易贷是房贷吗 防汛作文50字 公路自行车可以在马路上长途骑行吗 多栏式银行存款日记账属于()。单选题 A总分类账 B明细分类账 C序时账 D备查账 银行存款日记账样本,是按凭证类型还是日期逐笔登记 公路自行车骑行注意的事项 银行存款日记帐中结算凭证栏可能填写什么? 银行存款日记账与银行存款明细分类账的区别 电脑帐银行存款日记账的页面设置结算方式中几种结算方式各代表什么意思 提问:慢性肾炎转变成尿毒症的可能性大吗? 掌握哪些公路自行车骑行技巧可以安全出行? IGA肾病什么情况下会迅速转为尿毒症? 日记账簿分为哪几种类型 肾炎会成尿毒症吗 【杂谈】公路车适不适合骑行? 银行存款日记账的结算方式怎么填 慢性肾炎一定最终变成尿毒症吗? 银行存款日记账的结算方式中的类指的是什么 慢性肾炎多久会发展成尿毒症 spring boot spring-security-oauth2 默认的authorize和token接口的区别 catia和solidworks哪个好 房易贷真的有银行存管吗,哪个银行啊? catia的到底厉害在哪里,怎么感觉不出来和solidworks有什么区别? 请问交通银行的易贷通是怎么回事,怎样办理? 房易贷是什么意思啊? catia 的功能和solidworks有什么大的区别没有啊? CATIA和SOLIDWORKS哪个好用? catia 与solidworks哪种用的更广泛一些? 国商易贷 可靠吗 是哪家银行存管 PROE、SOLIDWORK、CATIA三款软件的区别是什么? PRO/E、UG、solidworks、solidedge、CATIA这些三维制图软件都有什么区别,各自又有哪些适用领域? 注销后手机号会解绑吗? Catia和Solidworks的关系是什么? catia与solidworks、ProE的区别 注销可以解除手机号绑定吗 CATIA与SW比较 注销后绑定的手机号怎么解绑? 汽油中毒怎样处理? 汽油中毒处理方法