实现OAUTH协议 实现 QQ 第三方登录效果

1.OAuth的简述

OAuth(Open Authorization,开放授权)是为用户资源的授权定义了一个安全、开放及简单的标准,第三方无需知道用户的账号及密码,就可获取到用户的授权信息,并且这是安全的。

1.主要的应用场景

1.目前很多网站集成了新浪微博,QQ等登录平台,这带来的好处是不言而喻的,只需要一个QQ号,就可以登录集成了qq登录的网站,

不用记住太多的用户名和密码,如果QQ能够一统江湖,对于用户将是大大的好事。

2.有时候希望访问授权平台的资源,也可以通过这样方式实现。

2.运行原理

 

 

步骤如下:

1.用户访问第三方应用。

2.访问授权方如QQ的授权界面。

3.用户在QQ登录界面上输入用户名密码,进行授权。

4.第三方应用获取授权信息。

 

在这个过程中,登录验证的操作都在授权方进行。如qq。

 

2.项目中遇到的问题

在客户端调用webservice的时候,我们比如需要获取某个用户的个人资料信息,我们会这样使用:

String getInfoByAccount(String account);

我们会传入帐号,这样就会带来一个问题,只要知道某人的帐号,别有用心的用户就会够着别人的帐号,获取别人的隐秘信息。

我想可以通过自己实现OAUTH的方式来自己实现一个。

实现的过程如下:

 

1.授权在第三方网站,点击授权方的登录界面,这个界面在授权服务器上。

2.输入用户名密码后,如果登录成功,将生成的token  跳转到第三方的验证程序上。

3.第三方的验证程序将token提交到授权端进行验证,验证成功后,则返回用户信息和token。

4.第三方程序将用户和token写入到session中。

 

5.写入后则代表第三方应用登录成功。

授权方代码实现:

 

1.登录成功后,将当前用户写入到一个缓存中,缓存的key,是刚生成的随机token,value 值 为IAuthUser。

 

2. 授权方对token进行验证。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String id=request.getParameter("uid");
        response.setContentType("text/json;charset=utf-8");

        IAuthService service=AppUtil.getBean(IAuthService.class);
        IAuthUser authuser= service.getByUid(id);
        if(authuser==null){
            response.getWriter().print("{result:-1,msg:\"userNotFound\"}");
        }
        else{
            boolean timeOut=authuser.isTimeOut();
            if(timeOut){
                response.getWriter().print("{result:-2,msg:\"timeout\"}");
            }
            else{
                IUser user=authuser.getUser();
                service.setAuth(user);
                String json="{result:0,id:\""+user.getUserId()+"\",account:\""+user.getAccount()+"\",fullname:\""+user.getFullname()+"\"}";
                response.getWriter().print(json);
            }
        }
    }

3.第三方应用验证逻辑。

第三方程序提交token给授权方。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String returnUrl=request.getParameter("returnUrl");
        String uid=request.getParameter("uid");
        String data="uid="+ uid;

        String json= HttpUtil.sendData(url, data, "");

        JSONObject jsonObj=JSONObject.parseObject(json);
        if(jsonObj.getInteger("result")==0){
            String userId=jsonObj.getString("id");
            String account=jsonObj.getString("account");
            String fullname=jsonObj.getString("fullname");
            User user=new User(userId, account, fullname);
            request.getSession().setAttribute(User.CURRENT_USER, user);
            request.getSession().setAttribute(User.CURRENT_ID, uid);
            if(StringUtil.isNotEmpty(returnUrl)){
                response.sendRedirect(returnUrl);
            }
        }
        else{
            response.getWriter().print(json);
        }

 

解决webserivce调用问题

在调用serivce的时候,就不要传入account了,传入上下文的token即可, 根据token 就可以获取对应的账户信息,这样也就解决了 直接输入帐号的问题。

时间: 2024-10-27 06:05:32

实现OAUTH协议 实现 QQ 第三方登录效果的相关文章

Android应用之最新版本SDKV2.4实现QQ第三方登录

为什么要写这篇博客呢?因为,我在做这个第三方登录的时候,找了很多资料,发现要么就是过时了,要么就是说的很不清楚,很罗嗦,而且很多都是一些小 demo,不是什么实例,甚至连腾讯官方的文档都有这个问题,文档中很多地方用的不是最新的sdk写的示例,用最新版本的sdk发现根本没法达到预期的效 果,很多api已经发生了变化,demo还是用的原来的api中的方法,最坑爹是demo下载下来还要一个支持的库文件,但是sdk中又没有提供.. 自己跌跌撞撞,查找资料,整合,弄了几个小时,终于把它给整出来了,用在了开

Android应用之——最新版本SDK V2.4实现QQ第三方登录

为什么要写这篇博客呢?因为,我在做这个第三方登录的时候,找了很多资料,发现要么就是过时了,要么就是说的很不清楚,很罗嗦,而且很多都是一些小demo,不是什么实例,甚至连腾讯官方的文档都有这个问题,文档中很多地方用的不是最新的sdk写的示例,用最新版本的sdk发现根本没法达到预期的效果,很多api已经发生了变化,demo还是用的原来的api中的方法,最坑爹是demo下载下来还要一个支持的库文件,但是sdk中又没有提供.. 自己跌跌撞撞,查找资料,整合,弄了几个小时,终于把它给整出来了,用在了开发的

利用JS_SDK实现QQ第三方登录

前言 现如今,第三方登录已成为大部分网站必备的一项基础技能,引入时髦的第三方登录不仅能帮你吸引更多的用户,也让你的网站可以充分利用其他大型网站的用户资源.本次教程将让你的网站最快捷便利地引入QQ登录. QQ第三方登录目前提供了JS SDK功能,这也是目前最简单直接的接入QQ互联的方式,没有之一.下面我将通过简单的几步轻松地让你的网站接入QQ登录. 准备工作 在正式接入之前你需要了解以下名词的含义: 1. appid :应用的唯一标识.在OAuth2.0认证过程中,appid的值即为oauth_c

javaEE SSH框架 qq第三方登录及用户绑定

前几天刚申请好域名,下面实现网站的qq第三方登录的功能,javaEE的SSH框架.(一些细节问题没有处理,只是大体上实现) 一:首先说一下需求,第一次使用qq第三方登录的用户需要绑定已有的网站用户名,绑定成功后进入首页.以后再使用qq第三方登录就直接进入网站首页. 二:要想使用qq第三方首先需要申请应用(需要有自己的域名) (1)登录qq互联网站申请应用,http://connect.qq.com/ (2)创建应用 (3)创建好之后还是可以修改的,这里回调地址我用的是域名+back.jsp界面(

QQ第三方登录

QQ第三方登录 在Android应用程序的开发过程中,很多时候需要加入用户登录/注册模块.除了自己动手设计登录界面并实现相应功能外,现在还可以借助百度.腾讯等开发者平台提供的第三方账号登录模块.最近研究了友盟的社会化分享组件,对其提供的SDK中第三方登录的QQ模块进行了测试.本篇文章先对友盟用户注册.SDK下载及案例的下载做一个简单的介绍,然后针对测试程序的过程及代码进行详细的描述. 顺便提一点,进入友盟的主页及SDK下载页面之后,会发现其支持Android.IOS等多个环境下的应用程序开发,感

Android 实现QQ第三方登录

在项目中需要实现QQ第三方登录,经过一番努力算是写出来了,现在总结以下,以防以后遗忘,能帮到其他童鞋就更好了. 首先肯定是去下载SDK和DEMO http://wiki.open.qq.com/wiki/mobile/SDK下载 本文是我自己整合后的简单DEMO. 先看下效果图吧 小码哥Html5教程,免费随你看 [点击进入] 24小时阅读30000+,48小时视频下载50000+ H5,JS,CSS,0基础学完独立开发网站/APP! 查 看 小码哥Html5教程,免费随你看 [点击进入] 24

javaEE SSH框架 qq第三方登录及用户绑定(java sdk版)

之前有位朋友用js sdk实现了 SSH框架下的qq第三方登录功能,但是我发现使用js sdk 有些无法克服的安全问题,所以我改用java sdk来实现这个功能! 如图,使用java sdk时,回调地址应设置为一个.action链接.(注意!修改回调地址的话,官方不会及时给你审核通过,有的人修改回调地址后一年 官方都没给他审核通过,这意味着[修改回调地址不如 要重新申请一个域名!重新申请一次网站接入]) 使用官方给定的Sdk4J.jar时 控制台会打印许多log信息,这严重影响项目的运行效率,所

使用QQ第三方登录时,手机应用和网站应用对同一个QQ号,获取到的openid不一样

使用QQ第三方登录时,手机应用和网站应用对同一个QQ号,获取到的openid不一样openid生成是根据应用的appid和QQ号的一些信息加密生成,对于一个appid和QQ号来说,openid是唯一的手机应用和网站应用使用的appid不是同一个,所以,获取到的openid也不会相同 那么问题来了同一个QQ,通过手机端第三方登录进去,和通过网站登录进去,因为openid不一样,会生成两个用户 解决方法: 给[email protected]发送邮件,内容格式: 第三方登录,web端返回的openi

QQ第三方登录demo

QQ第三方登录demo 最近使用第三方登录,QQ登录官方给的demo中类太多了,这里上传一个小demo,只有2个类,可以授权QQ进行第三方登录. 下载地址:http://www.devstore.cn/code/info/600.html 运行截图:   http://ds.devstore.cn/dev_store/user/souce_code/img/20150119160310177xjkim8dz/11111.png