OAuth2认证介绍

1.OAuth2认证简介

(1)OAuth2认证原理图:

2)简介:OAuth2(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。

(3)为什么使用OAuth2认证:防止第三方应用获得用户名和密码,在网页中完成认证。另外

使用https请求,防止抓包泄密。即使抓包获得了用户和密码,也是经过加密的,很难破解。

通过OAuth2认证最终可以获得token,然后通过token可以调用第三方平台提供的接口,实现需要的功能。

但若token保存在本地的话,需要加密,防止被窃取,泄露用户信息。

2.OAuth2认证的实际应用

获得新浪微博授权认证的流程:

(1)在新浪开放平台上创建应用,获得appkey、appsecret和回调地址

(2)在测试机上安装MD5签名生成工具 生成md5密钥 或在eclipse preference->build中查看当前keystore文件的md5值

并在开放平台的应用中填写

(3)如果应用未审核通过, 需要在开放平台测试信息里添加测试帐号, 只有测试帐号才能成功访问接口

新浪微博OAuth2认证 实现发微博功能代码:

主类:

public class MainActivity extends Activity {
    private int SEND_WEIBO=1;
    /** 注意:SsoHandler 仅当 SDK 支持 SSO 时有效 */
    private SsoHandler mSsoHandler;
    /** 微博 Web 授权类,提供登陆等功能 */
    private WeiboAuth mWeiboAuth;
    /** 封装了 "access_token","expires_in","refresh_token",并提供了他们的管理功能 */
    private Oauth2AccessToken mAccessToken;

    private HttpUtils httpUtils=new HttpUtils();

    private Handler handler=new Handler(){

        public void handleMessage(android.os.Message msg) {

            if(msg.what==SEND_WEIBO)
            {
                RequestCallBack<String> callBack=new RequestCallBack<String>() {

                    @Override
                    public void onSuccess(ResponseInfo<String> responseInfo) {
                        // TODO Auto-generated method stub
                        Toast.makeText(MainActivity.this, "发微博成功", Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onFailure(HttpException error, String msg) {

                        Toast.makeText(MainActivity.this, "发微博失败", Toast.LENGTH_SHORT).show();

                    }
                };
                try {
                    InputStream is=getAssets().open("a.jpg");

                    File file=new File(Environment.getExternalStorageDirectory()+"/a.jpg");
                    if(!file.exists())
                    {
                        file.createNewFile();
                    }
                    FileOutputStream out=new FileOutputStream(file);
                    byte []buffer=new byte[1024];
                    int len=0;
                    while( (len=is.read(buffer)) !=-1)
                    {
                        out.write(buffer, 0, len);
                    }
                    out.close();
                    is.close();
                    if(file!=null && file.length()>0)
                    {

                        RequestParams params=new RequestParams();
                        params.addBodyParameter("status", "测试用例");
                        params.addBodyParameter("source", "3680529134");
                        params.addBodyParameter("access_token", mAccessToken.getToken());
                        params.addBodyParameter("pic", file);

                        httpUtils.configTimeout(3000);
                        httpUtils.send(HttpMethod.POST, "https://upload.api.weibo.com/2/statuses/upload.json", params, callBack);

                    }

                } catch (IOException e) {

                    e.printStackTrace();
                }
//              httpUtils.configTimeout(3000);
                //httpUtils.send(HttpMethod.POST, "https://upload.api.weibo.com/2/statuses/upload.json", params, callBack);

            }

        };

    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 创建微博实例
        mWeiboAuth = new WeiboAuth(this, Constants.APP_KEY,
                Constants.REDIRECT_URL, Constants.SCOPE);
        Button btnLogin = (Button) findViewById(R.id.btn_sso);
        btnLogin.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                mSsoHandler = new SsoHandler(MainActivity.this, mWeiboAuth);
                mSsoHandler.authorize(new AuthListener());
            }
        });
    }
    /**
     * 当 SSO 授权 Activity 退出时,该函数被调用。
     *
     * @see {@link Activity#onActivityResult}
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // SSO 授权回调
        // 重要:发起 SSO 登陆的 Activity 必须重写 onActivityResult
        if (mSsoHandler != null) {
            mSsoHandler.authorizeCallBack(requestCode, resultCode, data);
            Toast.makeText(this, "认证 成功"+mAccessToken.getToken(), Toast.LENGTH_SHORT).show();
            handler.sendEmptyMessage(SEND_WEIBO);

        }
    }
    /**
     * 微博认证授权回调类。 1. SSO 授权时,需要在 {@link #onActivityResult} 中调用
     * {@link SsoHandler#authorizeCallBack} 后, 该回调才会被执行。 2. 非 SSO
     * 授权时,当授权结束后,该回调就会被执行。 当授权成功后,请保存该 access_token、expires_in、uid 等信息到
     * SharedPreferences 中。
     */
    class AuthListener implements WeiboAuthListener {
        @Override
        public void onComplete(Bundle values) {
            // 从 Bundle 中解析 Token
            mAccessToken = Oauth2AccessToken.parseAccessToken(values);
            if (mAccessToken.isSessionValid()) {
                // 显示 Token
                Log.d("Test", "token=" + mAccessToken.getToken());
            }
        }
        @Override
        public void onCancel() {
            Toast.makeText(MainActivity.this, "认证取消", Toast.LENGTH_LONG).show();
        }
        @Override
        public void onWeiboException(WeiboException e) {
            Toast.makeText(MainActivity.this,
                    "Auth exception : " + e.getMessage(), Toast.LENGTH_LONG)
                    .show();
        }
    }
}

项目下载地址:

http://download.csdn.net/detail/aehaojiu/8609659

需要用到xUtils开源项目:

http://download.csdn.net/detail/aehaojiu/8610323

时间: 2024-12-23 06:05:07

OAuth2认证介绍的相关文章

开放平台鉴权以及OAuth2.0介绍

OAuth 2.0 协议 OAuth是一个开发标准,允许用户授权第三方网站或应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的内容. OAuth 2.0不兼容1.0. 协议的参与者 RO (resource owner): 资源所有者,对资源具有授权能力的人. RS (resource server): 资源服务器,它存储资源,并处理对资源的访问请求. Client: 第三方应用,它获得RO的授权后便可以去访问RO的资源. AS (authoriz

基于Node的PetShop,oauth2认证RESTful API

前篇 - 用户名密码基本认证 后篇 - OAuth2认证 前文使用包passport实现了一个简单的用户名.密码认证.本文改用oauth2来实现更加安全的认证. 代码在这里. OAUTH2 用户认证,只使用用户名.密码还是非常基础的认证方式.现在RESTful API认证最多使用的是oauth2.使用oauth2就需要使用https,并hash处理client secret.auth code以及access token. oauth2需要使用包oauth2orize: npm install

Spring Security 与 OAuth2(介绍)

https://www.jianshu.com/p/68f22f9a00ee Spring Security 与 OAuth2(介绍) 林塬 2018.01.23 11:14* 字数 3097 阅读 3660评论 1喜欢 6 个人 OAuth2 全部文章 Spring Security 与 OAuth2(介绍):https://www.jianshu.com/p/68f22f9a00ee Spring Security 与 OAuth2(授权服务器):https://www.jianshu.co

asp.net 、C#实现微信企业号OAuth2认证

以微信企业号作为入口的应用,几乎都会遇到需要应用系统中个人信息和微信用户关联问题.从而进行其他业务处理.目前所做项目采取在企业号通讯录添加自定义字段存入应用系统用户信息表中唯一标识UserGuid进行关联.那么如何获取微信企业号通讯录存储的自定义字段.从而实现应用用户信息和微信账号关联?把实现方案大致整理一下,如有不足,还望指出: 1:在企业号通讯录内添加用户Guid唯一字段. 2:创建应用并启用回调模式 3:以微信为入口的应用验证用户的方法,首先在用户访问应用主页时判断Cookie是否有Use

OAuth2认证有一定的了解

转到分享界面后,进行OAuth2认证: 以新浪为例: 第一步.WebView加载界面,传递参数 使用WebView加载登陆网页,通过Get方法传递三个参数:应用的appkey.回调地址和展示方式display(如手机设备为mobile): 如:https://auth.sina.com.cn/oauth2/authorize?client_id=1750636396&redirect_uri=http://vdisk.weibo.com/&display=mobile 第二步.回调地址获取

【Servlet】对基于Jsp的微信Oauth2认证的改进

上次写出来的<[Servlet]基于Jsp的微信Oauth2认证>(点击打开链接)相当地不好,浪费了许多页面,而且类的安排与布置非常地不明确,如果多个微信公众平台的程序需要调用到Oauth2认证,必须整段整段代码复制拷贝,这次,对其进行了改进,认证过程也封装到一个类里面,可以多次复用. 一.基本准备 首先,我们要到微信的开发者中心,修改"OAuth2.0网页授权"的接口,如下图: 这里的"授权回调页面域名"是应该填写你服务器的总域名,而不是下面的一个个工

腾讯微博OAuth2.0认证介绍

腾讯微博开放平台,是基于腾讯微博系统,为广大开发者和用户提供的开放数据分享与传播平台. 广大开发者和用户登录平台后,就可以使用平台提供的开放API接口,创建应用从微博系统获取信息,或将新的信息传播到整个微博系统中,丰富多样的API接口和应用,加上您的智慧,将创造出无穷的应用和乐趣. 在使用腾讯微博平台提供的API前,您需要做以下两步工作: 成为开发者,并申请appkey和appsecret 授权获取accesstoken Accesstoken是第三方获得用户授权的凭证,是第三方访问api资源的

思杰XenServer相关官方认证介绍

大家如果以后想从事思杰虚拟化方面的工作,那么考一个全球通用的IT认证证书是找工作的敲门砖,全球有超过24万家企业使用思杰的解决方案,每天提供超过1亿个企业桌面系统,并服务75%的互联网用户.思杰客户包括100%的财富100强企业,99%的全球财富500强企业,以及成千上万家小企业和个人用户.所以虚拟化发展的前景还是不错的,另外在大型的企业中,拥有权威的IT认证的员工薪水一直是不断看涨的,所以无论是从职业发展规划还是薪水方面,所以考一些国际通用的IT证书放在身上,是很有必要的. 思杰的认证体系按职

华为认证介绍

华为认证考试是由华为签约考试代理商Prometric公司进行的.它通过考试使网络专业人士有机会证明他们的组网知识和专业技术.考试时间一般为一个小时:根据考试科目,试题数量不等,一般为50-70题:题型为单选.多选.判断题.华为认证是华为技术有限公司(简称"华为")凭借多年信息通信技术人才培养经验,以及对行业发展的理解,基于ICT产业链人才个人职业发展生命周期,以层次化的职业技术认证为指引,搭载华为"云-管-端"融合技术,推出的覆盖IP.IT.CT以及ICT融合技术领