Oauth学习

Oauth工作原理

什么是Oauth

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

Oauth当中的角色

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

Oauth验证流程

Oauth学习_第1张图片
Oauth验证
Oauth学习_第2张图片
详细流程

Oauth认证

  • Oauth认证步骤
Oauth学习_第3张图片
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学习_第4张图片
    客户发送数字签名
Oauth学习_第5张图片
服务器提供商获得签名

oauth-signpost 项目

https://code.google.com/p/oauth-signpost/
下载地址:https://code.google.com/p/oauth-signpost/downloads/list

Oauth学习_第6张图片
建立项目,导入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{

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学习)