您的位置:首页 > 其它

OAuth2.0协议原理与实现:协议实现

2017-03-19 00:00 375 查看
摘要: 本篇主要介绍了协议实现的运行和测试方式。

OAuth2.0协议原理与实现系列

(一) 协议原理

(二) TOKEN生成算法

(三) 协议实现

  最初计划在这一篇详细讲解OAuth2.0协议的java实现,提笔写了一段之后突然觉得对于开发人员来说,最好的学习方式还是看源码,所以也就放弃了继续写下去的念头,大家如果对于该协议的具体实现感兴趣,或者有相应的开发需求,可以
clone
下来研究一下。

项目地址:[https://github.com/procyon-lotor/x-oauth)

本项目为RFC6749协议的标准实现,主要用于对该协议的学习和理解,也可以在本项目基础上结合自己的业务场景做相应的改造,用于生产环境授权。

项目采用java语言开发,基于 Spring MVCSpring, 以及 MyBatis 框架,开发和运行环境如下:

数据库: MySQL 5.7

jdk版本: 1.8

  本项目主要实现了RFC6749定义的授权码授权模式和隐式授权模式,并参考文档“HTTP Authentication: MAC Authentication”实现了MAC类型的令牌。由于token的验证,以及OpenID的生成已经超出了OAuth2.0协议的范畴,本项目未作相应实现,token属于对称加密字符串,所以内部元素可以自行定义和验证,你可以采用AOP或注解的方式来实现token验证的逻辑,而OpenID只需要保证在(user_id, client_id)维度唯一即可。

运行与测试

项目相关表结构定义以及测试数据均放在
sqls
目录下。

注意: 实际应用中请强制开启HTTPS!

1. 授权码模式

请求获取授权码

http://localhost:8080/oauth/authorize/code?response_type=code&client_id=2882303761517520186&redirect_uri=http://www.zhenchao.com&scope=1%204&state=emhlbmNoYW8gcGFzc3BvcnQgb2F1dGg=

响应示例:

HTTP/1.1 302 Found
Location: http://www.zhenchao.com/?code=E670AC74F54CACC6222ADFFBEE51CADB&state=emhlbmNoYW8gcGFzc3BvcnQgb2F1dGg%3D


请求下发访问令牌

http://localhost:8080/oauth/authorize/token?grant_type=authorization_code&client_id=2882303761517520186&redirect_uri=http://www.zhenchao.com&code={your code here}

响应示例:

{
"access_token": "AAAAHGU4Y0Mrd1I2T3VhOHlRak9walY2T3hHSjM2VT0xLjAuMAAtAAAAAFlD/+YAAAFa4iNFYQAAAAAAAYagKAAAAAAGJToAAAAHMSAyIDQgNQAAAANtYWM=",
"expires_in": 1497628646,
"refresh_token": "refresh token",
"mac_key": "LJ2H7DxyKBGsJlGBryRsVzNKCzpF57owjeOf7CxMJUFegWO7YlLi24M0sDRfvooq",
"mac_algorithm": "hmac-sha-1"
}

2. 隐式授权模式

请求下发访问令牌

http://localhost:8080/oauth/implicit/token?response_type=token&client_id=2882303761517520186&redirect_uri=http://www.zhenchao.com&scope=1%204&state=emhlbmNoYW8gcGFzc3BvcnQgb2F1dGg=

响应示例:

HTTP/1.1 302 Found
Location: http://www.zhenchao.com#access_token=AAAAHFM5T1ZCZG5hL0RBeTlRekJCSjlWYUduUHpaMD0xLjAuMAAtAAAAAFlEADEAAAFa4iRncwAAAAAAAYagKAAAAAAGJToAAAAHMSAyIDQgNQAAAANtYWM=&token_type=mac&mac_key=fRgEdJsq6rR8TuH84mXkTZzAv0q6KyvQz7BVkkHYyln5FOVccPp4Cz4VuDcz9cfr&mac_algorithm=hmac-sha-1&expires_in=1497628721&scope=1+2+4+5

参考文献

RFC5849 - The OAuth 1.0 Protocol

RFC6749 - The OAuth 2.0 Authorization Framework

RFC6750 - The OAuth 2.0 Authorization Framework: Bearer Token Usage

HTTP Authentication: MAC Authentication (draft-hammer-oauth-v2-mac-token-02)

如有任何疑问,请发邮件到 zhenchao.wang@hotmail.com 咨询,最后打个小广告:

小米开放平台是小米公司面向生态链企业和第三方应用推出的开放服务平台,笔者所负责的账号接入服务是小米开放平台的核心业务之一,旨在通过小米海量用户,为生态链企业以及第三方应用开发者提供方便、快捷的授权登录服务,提升您的应用在MIUI平台(手机、电视、平板、电脑、路由器...)上的用户体验。小米账号开放服务基于OAuth2.0协议授权,每天承载约10亿次的授权调用,以多个IDC服务于全球用户,我们稳定、可靠,期待您的接入!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息