本项目为RFC6749协议的标准实现,主要用于对该协议的学习和理解,也可以在本项目基础上结合自己的业务场景做相应的改造,用于生产环境授权。
项目采用java语言开发,基于 Spring MVC, Spring, 以及 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!
- 请求获取授权码
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"
}
- 请求下发访问令牌
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 咨询。