基于浏览器
访问后跳到登录页面,登录成功后跳转到授权页面,授权成功后跳转到redirect_uri指定的地址。
1.请求授权。
http://localhost:8080/oauth/authorize?client_id=unity-client
&redirect_uri=http%3a%2f%2fwww.baidu.com
&response_type=code&scope=read
- 地址是
/oauth/authorize
. client_id
表示厂商的唯一标识,在厂商申请资质时自动生成的。redirect_uri
回调地址,认证成功后带着code重定向该地址。response_type
响应类型。scope
权限范围。
2.授权成功后回调地址
http://localhost:8080/unity/dashboard.htm?code=zLl170
- 地址是
redirect_uri
里配置的。 code
临时授权码。
3.通过code换取access_token
http://localhost:8080/oauth/token?client_id=unity-client
&client_secret=unity&grant_type=authorization_code
&code=zLl170&redirect_uri=http%3a%2f%2fwww.baidu.com
- 地址是
/oauth/token
。 client_id
表示厂商的唯一标识,在厂商申请资质时自动生成的,不可修改,全局唯一。client_secret
表示厂商的密码,在厂商申请资质时自动生成的,可以修改。grant_type
发放类型。code
授权成功后在回调地址里带的那个code。redirect_uri
回调地址,要与获取code的回调地址保持一致。
4.获取access_token响应的数据
{"access_token":"3420d0e0-ed77-45e1-8370-2b55af0a62e8",
"token_type":"bearer","refresh_token":"b36f4978-a172-4aa8-af89-60f58abe3ba1",
"expires_in":43199,"scope":"read"}
access_token
我们要的就是这个token,以后带着这个token访问我们的系统就畅通无阻了。token_type
类型,还没搞懂具体含义。refresh_token
刷新token有效时间时用。expires_in
过期时间,单位还没搞懂。scope
权限范围,和申请时配置一致。
5.获取access_token后访问资源 [GET]
http://localhost:8080/unity/dashboard.htm?
access_token=3420d0e0-ed77-45e1-8370-2b55af0a62e8
- 以后就可以带着token访问我们的站点资源了,就好像用户登录后操作一样。
6.刷新access_token [GET]
http://localhost:8080/oauth/token?client_id=mobile-client&client_secret=mobile
&grant_type=refresh_token&refresh_token=b36f4978-a172-4aa8-af89-60f58abe3ba1
- 地址
/oauth/token
。 client_id
表示厂商的唯一标识,在厂商申请资质时自动生成的,不可修改,全局唯一。client_secret
表示厂商的密码,在厂商申请资质时自动生成的,可以修改。grant_type
发放类型。refresh_token
获取token时得到的。
spring权限配置的要求
用户有个角色可以访问/openapi 客户端有个角色可以访问/openapi 用户把自己的openapi的访问权限给客户端,客户端拿着token才能访问用户的/openapi
已经实现OAuth2的一些开放平台
- 豆瓣 http://developers.douban.com/wiki/?title=oauth2
- 淘宝 http://open.taobao.com/doc/detail.htm?id=118
- 百度 http://developer.baidu.com/wiki/index.php?title=docs/oauth
- 易信 http://open.yixin.im/document/oauth/web
- 腾讯 http://wiki.open.qq.com/wiki/mobile/OAuth2.0%E5%BC%80%E5%8F%91%E6%96%87%E6%A1%A3
Oauth2参考资料
- 《OAuth2.0标准》IETF标准文档。
- 《OAuth 2 开发人员指南(Spring security oauth2)》这篇文章比较晦涩,但是核心。
- 《OAUTH2核心参数说明》这篇把主要url介绍了一遍,其实oauth2多数都支持get提交参数。
- spring-oauth-server.这是一个demo,根据spring官方demo改的。
- spring-security-oauth,官方源码。
- oauth2,spring的官方demo。
- 《spring security oauth2 参考的配置》
- 《Spring Security 与 Oauth2 整合 步骤》
- 《OAuth 2 Developers Guide》
- 《Security Namespace Configuration》spirng security配置详细介绍。
- spring-security-oauth官方首页。
- 《理解OAuth 2.0》