clark4working / passport-oauth

OAuth 2.0 Protocol Implementation

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

OAuth2.0授权协议实现


本项目为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)维度唯一即可。

项目相关博文:

  1. OAuth2.0协议原理与实现:协议原理
  2. OAuth2.0协议原理与实现:TOKEN生成算法
  3. OAuth2.0协议原理与实现:协议实现

运行与测试

项目相关表结构定义以及测试数据均放在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

参考文献

  1. RFC5849 - The OAuth 1.0 Protocol
  2. RFC6749 - The OAuth 2.0 Authorization Framework
  3. RFC6750 - The OAuth 2.0 Authorization Framework: Bearer Token Usage
  4. HTTP Authentication: MAC Authentication (draft-hammer-oauth-v2-mac-token-02)

如有任何疑问,请发邮件到 zhenchao.wang@hotmail.com 咨询。

About

OAuth 2.0 Protocol Implementation

License:Apache License 2.0


Languages

Language:Java 91.0%Language:JavaScript 7.2%Language:CSS 1.6%Language:Shell 0.1%Language:Batchfile 0.0%