本想前段时间就把自己通过QQ OAuth1.0、OAuth2.0协议进行验证而实现QQ登录的心得及Demo实例分享给大家,可一直很忙,今天抽点时间说下OAuth1.0协议原理,及讲解下QQ对于Oauth1.0的认证开发。闲话多说了点,下面直接进入主题。
1、OAuth的简述
OAuth(Open Authorization,开放授权)是为用户资源的授权定义了一个安全、开放及简单的标准,第三方无需知道用户的账号及密码,就可获取到用户的授权信息,并且这是安全的。(我喜欢简单明了,这里没看懂,没关系,接着往下面看)
2、OAuth的原理
(流程图)
我在图上分了四个步骤,下面是四步的讲解:
第一步:用户访问第三方网站,比如:就是你需要使用QQ进行登录的网站;
第二步:你点击QQ登录后,第三方网站将会连接并进行请求,比如:你点击登录后,第三方网站会跳转到QQ平台,提示你进行登录;
第三步:你要进行授权第三方网站对你的信息访问的一个权限,比如:当你QQ登录成功后,QQ会提示你,是否授权第三方Web访问你的用户基本信息或其他的资源信息,这时你点击授权即可;
第四步:授权后,第三方Web即可访问你刚才授权的资源信息,比如:你的QQ基本信息-头像、昵称、性别等。
通过这个原理图示及讲解(图是手工制作,有点草),相信大家都了解了OAuth这个原理的一个基本流程,若看不明白,你可以不用学习制作OAuth了,开个玩笑。(这步后,大家知道什么原理了,但还是无法知道OAuth究竟是如何实现认证的,别急,接着往下看)
3、OAuth 1.0的认证流程
这里直接讲解OAuth 1.0协议的认证机制(OAuth 2.0会在下一节中讲述),虽然现在很多平台都是遵循OAuth 2.0,但还是有开放OAuth 1.0平台的,比如:新浪微博、QQ1.0平台等。
在OAuth 1.0认证中会用到三个重要的Url:
第一个:Request Token Url,获取未授权的Token的Url;
第二个:User Authorization Url,请求用户对Token进行授权的Url;
第三个:Request Access Url,使用Token获取Access Token的Url。
上面是认证流程中用到的三个Url,在下面的流程示意图中会体现到,这是我讲解OAuth幻灯片的一页,直接截图下来进行讲解:
第一步:网站向认证平台请求一个未授权的Token,这个Request Token Url是前面说的第一个Url;
第二步:跳转至用户授权页面,提示用户进行登录,并进行授权,返回获得已授权的Token,用到的User Authorization Url是前面说的第二个Url;
第三步:通过已授权的Token,向认证平台请求Access Token(数据令牌),用到的Request Access Url是前面说的第三个Url,返回后到这步整个认证流程就结束了,最后一步,是通过数据令牌等参数,调用接口获取用户信息,不完全算认证的流程。(我喜欢简洁明了,认证流程就是这样,相信通过图示及讲解都能明白,若有不明白之处请留言)
4、QQ OAuth1.0认证中Url的调用及参数的传递
前面讲了OAuth1.0的机制原理及认证流程,这篇文章着重讲解QQ OAuth1.0认证中Url的调用、各参数的传递、注意事项。而因为现在QQ开发平台上,已经很少能找到OAuth1.0认证的说明开发文档了,采用新的2.0认证模式,所以简单讲述Url请求与返回参数的传递,并没有很详细深入地讲解,有什么问题大家可留言给我。
4.1、请求未授权的临时Token
新建一个页面为QQLogin.aspx,用来请求临时Token及跳转到用户授权页。下面是相关Url及参数介绍:
Request Token Url(请求临时Token的Url):http://openapi.qzone.qq.com/oauth/qzoneoauth_request_token
请求后,跳转至引导用户登录的Url:http://openapi.qzone.qq.com/oauth/qzoneoauth_authorize
第一个Url请求参数包含如下内容:(红色为必填、绿色为选填)
oauth_consumer_key | 申请QQ登录成功后,分配给网站的appid |
oauth_nonce | 随机字符串,所有oauth_nonce请使用int型值。 |
oauth_timestamp | unix时间戳(从UTC时间1970年1月1日00:00:00到当前时刻的秒数,不同语言中如何获取请google/baidu之)。 注意第三方服务器时间与腾讯服务器时间相差不能超过5分钟。 |
oauth_version | 版本号,请固定使用1.0 |
oauth_signature_method | 签名方法,请固定使用HMAC-SHA1。 |
oauth_signature | 签名值,用来提高传输过程参数的防篡改性。 签名值的生成详见【QQ登录】签名参数oauth_signature的说明 |
oauth_client_ip | 用户的IP地址(可选),int型 |
返回的参数有:oauth_token(临时令牌)、oauth_token_secret(临时密钥对应的令牌)
第二个Url需要传递的参数为:
oauth_consumer_key | 分配给网站的appid。 |
oauth_token | 上一步中,得到的oauth_token |
oauth_callback | 回调地址,即登录并授权后返回到你网站上的地址。 |
返回的参数有:
oauth_token | 已授权的token |
openid | 与APP通信的用户key,它和QQ号码一一对应,访问OpenAPI时必需。 同一个QQ号码在不同的应用中有不同的OpenID。 |
oauth_signature | 签名值。如果网站使用这一步返回的openid,则需要按规则生成签名值,并与该签名值比对,以验证openid以及来源的可靠性。 比对时生成签名值的规则:使用HMAC-SHA1算法,源串:openid+openid的timestamp(串中间不要添加'+'符号);密钥:oauth_consumer_secret。 |
timestamp | openid的时间戳 |
oauth_vericode | 授权验证码。 |
4.2、请求Access Token数据令牌
上一步中,我们写了一个回调地址,并顺利得到一些参数,下面就是拿这些参数来进行下一步操作,首先,得到数据令牌(只有拿到数据令牌才可以调用接口获取用户信息)。
Request Access Url(获取Access Token请求Url):http://openapi.qzone.qq.com/oauth/qzoneoauth_access_token
Url请求参数包含如下内容:
oauth_consumer_key | 分配给网站的appid |
oauth_token | 已授权的的token,上一步返回的oauth_token |
oauth_nonce | 随机数 |
oauth_timestamp | unix时间戳(从UTC时间1970年1月1日00:00:00到当前时刻的秒数,不同语言中如何获取请google/baidu之) |
oauth_version | 版本号,请固定使用1.0 |
oauth_signature_method | 签名方法,请固定使用HMAC-SHA1 |
oauth_signature | 签名值,用来提高传输过程参数的防篡改性。 签名值的生成详见【QQ登录】签名参数oauth_signature的说明 |
oauth_vericode | 授权验证码,上一步返回的oauth_vericode |
oauth_client_ip | 用户的IP地址(可选),int型 |
返回的参数如下:
oauth_token | 具有访问权限的access_token |
oauth_token_secret | access_token的密钥 |
openid |
在第一步和本步骤中都返回了openid。使用本步骤返回的openid,更为安全 |
timestamp | openid的时间戳 |
oauth_signature | 针对openid的签名值 |
4.3、通过Access token(数据令牌)调用API接口,获取用户授权资源
请求Url:http://openapi.qzone.qq.com/user/get_user_info (这里默认写的是get_user_info接口)
请求参数:
oauth_consumer_key | 分配给网站的appid |
oauth_token | 上一步返回的oauth_token |
oauth_nonce | 随机数,int型 |
oauth_timestamp | unix时间戳(从UTC时间1970年1月1日00:00:00到当前时刻的秒数,不同语言中如何获取请google/baidu之)。 |
oauth_version | 版本号,固定使用1.0 |
oauth_signature_method | 签名方法,固定使用HMAC-SHA1 |
oauth_signature | 签名值,用来提高传输过程参数的防篡改性。 签名值的生成详见【QQ登录】签名参数oauth_signature的说明 |
openid | 上一步返回的openid。 |
oauth_client_ip | 用户的IP地址(可选),int型 |
好了,上面就是整个QQ OAuth1.0认证流程中Url参数的请求与返回说明,这OAuth1.0认证中,你会发现参数特别多,还有经过HMAC-SHA1加密、签名等操作,特别麻烦、繁琐,所以还是最好推荐使用OAuth 2.0认证协议进行接口开发。
下面这篇文章是QQ登录制作过程中,公共返回码说明(包含1.0、2.0),供大家参考,看是哪个阶段出错,然后对症下药,特别是参数的请求、传递是否正确,还有一个参数顺序、签名是否正确,这四点弄好,相信这个东西自然就实现了。
OAuth_QQ登录_公共返回码说明:点击进入。
最后将自己开发制作的OAuth 1.0源代码分享给大家,代码分享:点击下载。
5、OAuth2.0的认证流程
在OAuth2.0的处理流程,主要分为以下四个步骤:
1)得到授权码code
2)获取access token
3)通过access token,获取OpenID
4)通过access token及OpenID调用API,获取用户授权信息
上面是流程的大概四个步骤,在下面的流程示意图中会得到体现,这是我制作的一个幻灯片的流程图(文章最后会附上制作的OAuth幻灯片分享给大家),这里就直接截图下来进行讲解:
第一步:首先直接跳转至用户授权地址,即图示 Request User Url ,提示用户进行登录,并给予相关资源授权,得到唯一的Auth code,这里注意的是code只有10分钟的有效期,对于安全考虑,相对于OAuth 1.0省了一步获取临时的Token,并且有效期也进行了控制,比1.0认证简化了很多,并安全一些;
第二步:得到授权code后,这一步就是请求access token,通过 图示 Request access url ,生成得到数据Token;
第三步:通过Access Token请求OpenID,OpenID是用户在此平台的唯一标识,通过图示 Request info url 请求,然后得到OpenID;
第四步:通过第二步得到的数据Token、第三步得到的OpenID及相关API,进行请求,获取用户授权资源信息。(我喜欢简洁明了,OAuth2.0认证流程就是这样,相信通过图示及讲解都能明白,若有不明白之处请留言)
最后,分享自己关于OAuth1.0、2.0认证流程讲解的幻灯片,结合文章来看,你会更容易理解。
课件分享:点击下载 (麻烦保留博主信息,谢谢)
相关推荐
OAuth2用户指南是针对开发人员和系统管理员的一份详尽文档,它主要讲解了如何在Java环境下实现OAuth2授权框架,以确保安全地访问和管理应用程序的受保护资源。OAuth2是一个开放标准,用于授权第三方应用获取或使用...
通过授权码流程、密码模式、客户端凭据模式等多种授权类型,OAuth2提供了灵活的授权机制,广泛应用于社交登录、API访问控制等领域。 在课程中,新增的第10+11章可能涵盖了Spring Security与OAuth2的深度整合,这...
这个案例将深入讲解如何在实际项目中应用 OAuth2,以确保用户数据的安全,并允许第三方应用以受控的方式访问资源。 OAuth2 是一个开放标准,用于授权第三方应用访问用户在原服务提供商上的资源,而无需获取用户的...
通过实际操作,开发者可以更好地理解和掌握OAuth2的工作原理和最佳实践。 6. **文件名称列表:oauth2**: 压缩包中的"oauth2"可能包含一系列的源代码文件、配置文件、文档或示例数据,它们构成了整个OAuth2实战...
本文将深入讲解腾讯微博Oauth2.0授权认证的原理及其在易语言中的实现。 OAuth2.0是一种授权框架,广泛用于第三方应用获取用户资源的权限,而无需直接存储用户的账号密码。它的核心流程包括四个主要角色:资源所有者...
在iOS 5及以上版本,我们可以使用新浪提供的OAuth授权机制来实现微博的登录、分享等功能。本文将深入讲解如何在iOS应用中集成新浪微博的OAuth服务,以实现与微博平台的无缝对接。 首先,我们需要了解OAuth的基本...
3. **用户认证机制**:理解OAuth2.0授权流程,实现用户登录和授权功能。 4. **UI设计**:运用Android布局组件创建微博的主界面、个人主页、发布微博等界面,以及自定义视图的使用。 5. **网络请求处理**:使用...
在本电商项目实战讲解视频系列中,我们涵盖了67到68两部分,这是一份宝贵的教育资源,旨在帮助学习者深入了解电商项目的实际运作与开发流程。电商项目涉及到多个技术领域和业务层面,包括前端界面设计、后端服务构建...
该书系统讲解了微信公众平台应用开发的流程、方法和技巧,并配有若干完整的案例。 全书共11章,逻辑上划分为四个部分: 第一部分(第1~2章)介绍了公众平台的使用、公众账号的认证、编辑模式的使用等基础知识。 ...
本文将深入探讨OAuth的核心概念、工作原理,并结合PHP环境,讲解如何实现OAuth授权过程,以及在实际项目中如何应用。 一、OAuth简介 OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存储在特定服务提供者...
而`30ed608b4563edac221e96c691079d75.mp4`可能是一个教学视频,详细讲解了项目开发过程或者关键概念。 通过这个项目,学习者可以实践Web开发的全栈流程,从设计用户界面,到实现后端功能,再到数据库交互,最后...
《gRPC与云原生应用开发:以Go和Java为例》是卡山·因德拉西里和丹尼什·库鲁普合著的一本技术图书,深入探讨了gRPC这一高性能远程过程调用(RPC)框架在现代云原生应用开发中的应用。gRPC是一种跨语言、基于HTTP/2...
首先,文档可能开始于一个项目简介,概述renren-security的主要特性,例如它的权限管理机制、安全认证流程、以及对Spring Boot和MyBatis等流行技术的集成。接着,可能会详细阐述如何搭建开发环境,包括必要的软件...
根据提供的信息,我们可以总结出以下有关“Android开发系列视频教程及其实例源码”的关键知识点: ### 一、Android开发视频教程概览 #### 1.1 教程来源 该系列视频教程由作者发布在其博客...
《Java企业级开发项目实践》一书由曹广鑫撰写,是针对Java在企业级应用中的实际开发经验的...通过阅读此书,开发者不仅可以提升Java编程技能,还能了解到完整的项目开发流程和最佳实践,从而在实际工作中更加得心应手。
书中的项目会涉及ASP.NET的身份认证机制,如Forms Authentication和OAuth,以及角色管理和权限控制。 7. **Web API开发**:ASP.NET还支持构建RESTful风格的Web服务,便于与其他应用或设备通信。书中会介绍如何创建...
5. **持续集成/持续部署(CI/CD)**:讲解Jenkins、GitLab CI/CD等工具,实现自动化测试和部署流程,提升开发效率。 6. **测试报告与覆盖率**:学习如何生成详细的测试报告,以及使用coverage.py等工具追踪测试覆盖率...
2. 组件化实施过程:讲解如何将即时通讯功能作为组件进行分离,提高代码复用性和可维护性。 三、组件化方案 1. 组件化实施:介绍组件化开发思想,如何将大型项目拆分成多个独立组件。 2. 二进制化方案:探讨将组件...
这部分会讲解OAuth2、JWT等认证授权机制,以及如何在微服务间实现安全的通信。 7、**持续集成**:CI/CD(Continuous Integration/Continuous Deployment)是现代软件开发的最佳实践。这部分会介绍Jenkins、GitLab C...