oauth2授权接口

/ Spring Cloud / 没有评论 / 81浏览

本博客不介绍原理,只记录access_token访问接口。

其中http://192.168.11.200:8080均为spring security oauth服务的地址。

oauth2授权

授权码模式(authorization_code)

我们经常可以在网上看到通过微信登录,QQ登录等字眼。

举个例子,比如我们想登入csdn的时候我们就会选择微信或者QQ登录的方式,在这里就发生了我们的授权码的流转,授权码模式是作为OAuth2最经典的模式。

适用第三方平台的对接。

获取code

获取code:

GET http://192.168.11.200:8080/oauth/authorize?response_type=code&client_id=localhost&redirect_uri=http://localhost:9001/callback

重定向登录界面,登录。

授权,返回code,回调:http://localhost:9001/callback?code=5MaQxl

根据code获取access_token

code获取access_token:

POST http://192.168.11.200:8080/oauth/token?grant_type=authorization_code&code=5MaQxl&client_id=localhost&client_secret=secret&redirect_uri=http://localhost:9001/callback

响应:

{
    "access_token": "051e83e6-d159-4ebd-b694-c9b9fb4af41e",
    "token_type": "bearer",
    "refresh_token": "edb576f6-6362-47f1-90bb-e7232d81385d",
    "expires_in": 86399,
    "scope": "default"
}

刷新token(refresh_token)

access_token过期则通过refresh_token刷新:

POST http://192.168.11.200:8080/oauth/token?grant_type=refresh_token&refresh_token=edb576f6-6362-47f1-90bb-e7232d81385d&client_id=localhost&client_secret=secret

密码模式(password)

password模式,在认证时需要带上自己的用户名和密码,需要传递username和password参数,以及客户端的client_id,client_secret。

此时,accessToken所包含的权限是用户本身的权限,而不是客户端的权限。

适用于内部系统认证。

直接获取access_token

获取access_token:

POST http://192.168.11.200:8080/oauth/token?grant_type=password&client_id=localhost&client_secret=secret&username=bobo&password=bobo123

客户端模式(client_credentials)

client模式,没有用户的概念,不需要传递username和password参数。 直接与认证服务器交互,用配置中的客户端信息去申请accessToken。客户端有自己的client_id、client_secret对应于用户的username、password

主要适用于服务端之间的调用,比如openAPI等,跟用户无关。

直接获取access_token

获取access_token:

POST http://192.168.11.200:8080/oauth/token?grant_type=client_credentials&client_id=localhost&client_secret=secret

响应:

{
    "access_token": "016d82f6-ee13-41b6-8e78-360ca8e9b1dd",
    "token_type": "bearer",
    "expires_in": 86399,
    "scope": "default"
}

简化模式(implicit)

不建议使用。