文档章节

基于Oauth2的api接口开发(一)

ifnotme
 ifnotme
发布于 2016/09/06 13:44
字数 761
阅读 1168
收藏 18

1.OAUTH2核心参数说明

grant_type参数说明表格:

grant_type

说明

authorization_code

标准的Server授权模式

password

基于用户密码的授权模式

client_credentials

基于APP密钥的授权模式

refresh_token

刷新accessToken

 

response_type参数说明表格:

response_type

说明

code

标准的Server授权模式响应模式

token

脚本的授权响应模式,直接返回token,需要对回调进行校验

 

2.OAUTH2各种请求流程

2.1.Authorization Code(标准请求流程,必须实现)

标准的的Server授权模式,与目前开放平台的Session机制很像。第一步获取code,第二步code换token。

第一步:APP首先发送获取code请求

GET /authorize?response_type=code&client_id=s6BhdRkqt3&

         redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1

     Host: server.example.com

容器返回code

HTTP/1.1 302 Found

     Location: https://client.example.com/cb?code=i1WsRn1uB1

 

第二步:APP根据code发送获取token请求

POST /token HTTP/1.1

     Host: server.example.com

     Content-Type: application/x-www-form-urlencoded

     grant_type=authorization_code&client_id=s6BhdRkqt3&

     client_secret=gX1fBat3bV&code=i1WsRn1uB1&

     redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb

容器直接返回token

     HTTP/1.1 200 OK

     Content-Type: application/json

     Cache-Control: no-store

     {

       "access_token":"SlAV32hkKG",

       "token_type":"example",

       "expires_in":3600,

       "refresh_token":"8xLOxBtZp8",

       "example_parameter":"example-value"

     }

标准oauth2流程图

 

2.2.Implicit Grant(直接发放模式)

适用于运行于浏览器中的脚本应用,需要校验callback地址,而且只返回该应用注册的回调地址

APP直接请求token

GET /authorize?response_type=token&client_id=s6BhdRkqt3&

         redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1

     Host: server.example.com

 

容器通过重定向返回token

HTTP/1.1 302 Found

     Location: http://example.com/rd#access_token=FJQbwq9&

               token_type=example&expires_in=3600

 

2.3.Resource Owner Password Credentials (基于用户名与密码模式)

称之为用户名密码模式,需要提供终端用户的用户名和密码,适用于比如操作系统或者高权限的应用。

APP直接带上用户名和密码请求

POST /token HTTP/1.1

     Host: server.example.com

     Content-Type: application/x-www-form-urlencoded

     grant_type=password&client_id=s6BhdRkqt3&

     client_secret=47HDu8s&username=johndoe&password=A3ddj3w

 

容器直接返回token

     HTTP/1.1 200 OK

     Content-Type: application/json

     Cache-Control: no-store

     {

       "access_token":"SlAV32hkKG",

       "token_type":"example",

       "expires_in":3600,

       "refresh_token":"8xLOxBtZp8",

       "example_parameter":"example-value"

     }

 

2.4.Client Credentials

基于APP的密钥直接进行授权,APP的权限非常大,慎用。这个模式可以考虑用于目前我们不需要弹出授权的特殊应用,如淘江湖,前端插件等。

APP直接根据客户端的密码来请求

POST /token HTTP/1.1

     Host: server.example.com

     Content-Type: application/x-www-form-urlencoded

     grant_type=client_credentials&client_id=s6BhdRkqt3&

     client_secret=47HDu8s

 

容器直接返回token

HTTP/1.1 200 OK

     Content-Type: application/json

     Cache-Control: no-store

     {

       "access_token":"SlAV32hkKG",

       "token_type":"example",

       "expires_in":3600,

       "refresh_token":"8xLOxBtZp8",

       "example_parameter":"example-value"

     }

3.oauth2实现

Spring security+oauth2框架与Shiro+oltu相比,后者的入门门槛相对较低, 代码更加透明, 理解更容易,可扩展性更强, 且模块化开发。

  • Spring security+oauth2框架
  1. Spring Oauth2,参考http://www.oschina.net/p/spring-oauth-server.
  2. 官方开发指南http://projects.spring.io/spring-security-oauth/docs/oauth2.html 
  3. 中文版http://www.oschina.net/translate/oauth-2-developers-guide

代码地址1:https://github.com/favccxx/FavOAuth2 【oauth2-server】

代码地址2:http://git.oschina.net/mkk/oauth2-shiro 【oauth2-server】

代码地址3:http://git.oschina.net/mkk/spring-oauth-client/ 【oauth2-client】

 

  • 推荐资料:

http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

 

© 著作权归作者所有

共有 人打赏支持
ifnotme
粉丝 3
博文 20
码字总数 10746
作品 0
北京
后端工程师
私信 提问
搭建基于OAuth2和SSO的开放平台

原创文章,转载或摘录请说明文章来源,谢谢! http://heartlifes.com/%E6%90%AD%E5%BB%BA%E5%9F%BA%E4%BA%8Eoauth2%E5%92%8Csso%E7%9A%84%E5%BC%80%E6%94%BE%E5%B9%B3%E5%8F%B0/ 原创文章,转......

吕伯文
2018/06/22
0
0
SpringCloud(八):API网关整合OAuth2认证授权服务

一、概念部分 API网关将自己注册为Eureka服务治理下的应用,同时也从Eureka服务治理中获得所有其他微服务的实例信息。我们通过搭建独立的OAuth2认证授权服务,将微服务中冗余的登录校验、签名...

蓝士钦
2017/11/07
0
0
[认证授权] 5.OIDC(OpenId Connect)身份认证授权(扩展部分)

在上一篇[认证授权] 4.OIDC(OpenId Connect)身份认证授权(核心部分)中解释了OIDC的核心部分的功能,即OIDC如何提供id token来用于认证。由于OIDC是一个协议族,如果只是简单的只关注其核...

_blackheart
2017/11/16
0
0
AspNetCore中使用Ocelot之 InentityServer4(1)

AspNetCore中使用Ocelot之 InentityServer4(1) 前言: OceLot网关是基于AspNetCore 产生的可扩展的高性能的企业级Api网关,目前已经基于2.0 升级版本升级,在使用AspNetCore 开发的时候可以...

乐途
2018/08/09
0
0
heyuxian/mcloud-oauth2-server

MCloud - OAuth2 认证中心 简介 基于Spring OAuth2,实现了OAuth2认证服务器以及资源服务器,并以 Restful API 的方式提供了OAuth 客户端以及用户的管理功能。项目中主要使用了以下技术: Ja...

heyuxian
2017/10/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

分布式项目(五)iot-pgsql

书接上回,在Mapping server中,我们已经把数据都整理好了,现在利用postgresql存储历史数据。 iot-pgsql 构建iot-pgsql模块,这里我们写数据库为了性能考虑不在使用mybatis,换成spring jd...

lelinked
今天
2
0
一文分析java基础面试题中易出错考点

前言 这篇文章主要针对的是笔试题中出现的通过查看代码执行结果选择正确答案题材。 正式进入题目内容: 1、(单选题)下面代码的输出结果是什么? public class Base { private Strin...

一看就喷亏的小猿
今天
1
0
cocoapods 用法

cocoapods install pod install 更新本地已经install的仓库 更新所有的仓库 pod update --verbose --no-repo-update 更新制定的仓库 pod update ** --verbose --no-repo-update...

HOrange
今天
3
0
linux下socket编程实现一个服务器连接多个客户端

使用socekt通信一般步骤 1)服务器端:socker()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接。 2)客户端:socker()建立套接字,连接(connect)服务器,连接上后...

shzwork
昨天
3
0
android自定义viewgroup画背景

设计部要求背景实现一个背景边框带圆弧的效果: 所以想着用自定义控件画一个背景。 为了方便,继承的是LinearLayout,在onMeasure中先获取控件宽高: @Overrideprotected void onMeasure(in...

醉雨
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部