四大微博OAuth认证

转载 2012年03月22日 11:55:58

四大微博OAuth认证  不指定

作品 , 评论(32) , 引用(0) , 阅读(2581)   |  |   

据说这两天腾讯的服务器出了问题,认证的时候报这样的错:

Java 代码复制内容到剪贴板
  1.     
  2. oauth.signpost.exception.OAuthCommunicationException: Communication with the service provider failed: Not trusted server certificate      
  3. Caused by: javax.net.ssl.SSLPeerUnverifiedException: No peer certificate      
  4. oauth.signpost.exception.OAuthCommunicationException: Communication with the service provider failed: Nopeer certificate  

这是因为Https认证被截获导致,Client认为安全失效,很久之前就出现了这个问题了,那时候在WebView上加上下面的代码就可以解决了

Java 代码复制内容到剪贴板
  1.     
  2. public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {        
  3.      handler.proceed();      
  4. }    

没想到又出现这个问题,于是一翻研究,在stackoverflow.com上找到答案,写了一个自定义类继承SSLSocketFactory,

Java 代码复制内容到剪贴板
  1.     
  2. public class SSLSocketFactoryEx extends SSLSocketFactory {      
  3.       
  4.     SSLContext sslContext = SSLContext.getInstance("TLS");      
  5.       
  6.     public SSLSocketFactoryEx(KeyStore truststore)      
  7.             throws NoSuchAlgorithmException, KeyManagementException,      
  8.             KeyStoreException, UnrecoverableKeyException {      
  9.         super(truststore);      
  10.       
  11.         TrustManager tm = new X509TrustManager() {      
  12.       
  13.             public java.security.cert.X509Certificate[] getAcceptedIssuers() {      
  14.                 return null;      
  15.             }      
  16.       
  17.             @Override      
  18.             public void checkClientTrusted(      
  19.                     java.security.cert.X509Certificate[] chain, String authType)      
  20.                     throws java.security.cert.CertificateException {      
  21.       
  22.             }      
  23.       
  24.             @Override      
  25.             public void checkServerTrusted(      
  26.                     java.security.cert.X509Certificate[] chain, String authType)      
  27.                     throws java.security.cert.CertificateException {      
  28.       
  29.             }      
  30.         };      
  31.       
  32.         sslContext.init(nullnew TrustManager[] { tm }, null);      
  33.     }      
  34.       
  35.     @Override      
  36.     public Socket createSocket(Socket socket, String host, int port,      
  37.             boolean autoClose) throws IOException, UnknownHostException {      
  38.         return sslContext.getSocketFactory().createSocket(socket, host, port,      
  39.                 autoClose);      
  40.     }      
  41.       
  42.     @Override      
  43.     public Socket createSocket() throws IOException {      
  44.         return sslContext.getSocketFactory().createSocket();      
  45.     }      
  46. }  

调用方法,只要用认证返回的HttpCilent即可。代码:

Java 代码复制内容到剪贴板
  1.     
  2. public HttpClient getNewHttpClient() {      
  3.         try {      
  4.             KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());      
  5.             trustStore.load(nullnull);      
  6.       
  7.             SSLSocketFactory sf = new SSLSocketFactoryEx(trustStore);      
  8.             sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);      
  9.       
  10.             HttpParams params = new BasicHttpParams();      
  11.             HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);      
  12.             HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);      
  13.       
  14.             SchemeRegistry registry = new SchemeRegistry();      
  15.             registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));      
  16.             registry.register(new Scheme("https", sf, 443));      
  17.       
  18.             ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);      
  19.       
  20.             return new DefaultHttpClient(ccm, params);      
  21.         } catch (Exception e) {      
  22.             return new DefaultHttpClient();      
  23.         }      
  24.     }  

这样就解决了问题,有网友说把腾讯认证的地址https去掉改成http,那是不可取的做法。

我已经把代码集成到signpost中,如果有需要的同学可自行下载,有不明白或者不好的地方给我评论留言。

点击在新窗口中浏览此图片

源码下载:

2011-12-11日更新了oauth-signpost-1211.jar包,把原来打jar包时也一起打的commons-codec.jar去掉了。

php 新浪微博第三方登录验证/OAuth2.0

新浪微博实现第三方网站登录 创建新浪微博账号 可用微博账号登录 登录地址:http://open.weibo.com/ 网站接入 2.立即接入->添加新网站 创建成功 获取 App key...
  • u011650048
  • u011650048
  • 2016年06月28日 18:35
  • 1513

新浪微博OAuth接口实现登录 java版

新浪微博采用的是OAuth协议来做的登录,现在登录接口做完了。留个笔记方便以后查阅,也方便后来人能够少走一些弯路。 首先简单说说OAuth授权协议:OAUTH协议为用户资源的授权提供了一个安...
  • A__java___A
  • A__java___A
  • 2011年09月28日 21:10
  • 8539

新浪微博 OAuth2.0 授权认证

微博开放接口的调用,如发微博、关注等,都是需要获取用户身份认证的。目前微博开放平台用户身份鉴权主要采用的是OAuth2.0。另外,为了方便开发者开发、测试自己的应用,我们还提供了Basic Auth的...
  • daisuyang518
  • daisuyang518
  • 2015年09月03日 16:26
  • 886

OAuth2.0协议&第三方登录(微信,QQ,微博)

OAuth2.0协议&第三方登录(微信,QQ,微博)OAuth 2.0协议1.应用场景OAuth 2.0是一个关于授权的开放标准。 假如某个应用需要得到你的授权,如果不使用OAuth2.0协议,会要...
  • BeanJerry
  • BeanJerry
  • 2016年05月12日 22:44
  • 1402

新浪微博Oauth2.0授权认证及SDK、API的使用(Android)

本文主要介绍新浪微博客户端的api接入,实现第三方授权登录功能,以及api的调用。要求亲自动手进行实际操作,学会基本的授权认证机制和常用API的调用。Oauth2.0协议: 允许用户提供一个令牌,而不...
  • sdksdk0
  • sdksdk0
  • 2016年07月18日 11:39
  • 6983

学习新浪微博开发的OAuth2.0登陆协议(阶段一)

OAuth2.0是一种较安全的登陆第三方应用的协议,它有效的避免用户密码和账户直接登陆第三方应用,因此这种协议的安全性比较高,现在很多应用都采用了这种协议来开放API接口,例如facebook,新浪微...
  • xuguoli_beyondboy
  • xuguoli_beyondboy
  • 2015年05月01日 14:02
  • 1323

SSO授权认证分析及与OAuth的表层区别--新浪微博iOS平台举例

SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的...
  • Winzlee
  • Winzlee
  • 2015年04月22日 18:42
  • 1911

OAuth的三种认证方式

三种认证方式: (1)Resource Owner Password Credentials Grant(资源所有者密码凭据许可) (2)Implicit Grant(隐式许可) ...
  • poison_biti
  • poison_biti
  • 2017年07月31日 13:03
  • 231

(一)新浪微博_OAuth2.0授权机制

转载请说明出处 http://blog.csdn.net/sinat_29071599/article/details/47997485 by 背包下的影子 OAuth2.0 概述 整...
  • sinat_29071599
  • sinat_29071599
  • 2015年08月26日 06:53
  • 2462

【引用】一步一步搭建OAuth认证服务器

现在越来越多开放的互联网公司提供对外的 API 接口,使得第三方应用开发人员可以开发基于该平台接口的应用程序。国外有Twitter、Flicker Service等;国内的,像腾讯微博开放平台、新浪微...
  • hawk140
  • hawk140
  • 2016年08月28日 11:46
  • 538
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:四大微博OAuth认证
举报原因:
原因补充:

(最多只允许输入30个字)