美文网首页
Oauth学习

Oauth学习

作者: 六便士少年 | 来源:发表于2015-04-21 11:16 被阅读324次

    Oauth工作原理

    什么是Oauth

    官方网站
    1.Oauth是一种安全认证的协议
    2.Oauth协议为用户资源的授权提供了一个安全的、开发而又简易的标准
    3、Oauth的授权不会使第三方触及到用户的帐号信息(例如用户名和密码)

    Oauth当中的角色

    1. Service Provider 服务提供商 例如QQ facebook 老大
    2. User用户 使用我们程序的人
    3. Consumer 客户 我们所开发的程序
    4. Protected Resources 被保护的资源 照片、文档、私人信息 **

    Oauth验证流程

    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

    建立项目,导入jar包

    在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;
    }
    }
    

    相关文章

      网友评论

          本文标题: Oauth学习

          本文链接:https://www.haomeiwen.com/subject/xwkufttx.html