5.1. 获取 OAuth token

任何 REST API 方法都需要 OAuth token(除了使用匿名访问)。可以通过 POST 方式获取 token:

http://localhost:8080/app/rest/v2/oauth/token

该 endpoint 使用基本身份验证进行访问保护,即 REST API 客户端 ID 和密码。请注意,这里的客户端 ID 和密码不是应用程序的用户登录名和密码。客户端 ID 和密码在添加 REST API 插件后生成。可以在 web-app.properties 中查看或修改,通过 cuba.rest.client.idcuba.rest.client.secret 应用程序属性。必须在 Authorization 请求头中以 base64 编码的字符串传递客户端 ID 和密码,客户端 ID 和密码使用冒号(":")分隔。

请求类型必须是 application/x-www-form-urlencoded,编码方式为 UTF-8

请求必须包含以下参数:

  • grant_type - password

  • username - 应用程序用户登录名。

  • password - 应用程序用户密码。

比如,对于如下参数

cuba.rest.client.id=client
cuba.rest.client.secret={noop}secret

token 请求是这样:

POST /oauth/token
Authorization: Basic Y2xpZW50OnNlY3JldA==
Content-Type: application/x-www-form-urlencoded

grant_type=password&username=smith&password=qwerty123

也可以使用 cURL

curl -H "Content-type: application/x-www-form-urlencoded" -H "Authorization: Basic Y2xpZW50OnNlY3JldA==" -d "grant_type=password&username=admin&password=admin" http://localhost:8080/app/rest/v2/oauth/token

方法返回一个 JSON 对象:

{
  "access_token": "29bc6b45-83cd-4050-8c7a-2a8a60adf251",
  "token_type": "bearer",
  "refresh_token": "e765446f-d49e-4634-a6d3-2d0583a0e7ea",
  "expires_in": 43198,
  "scope": "rest-api"
}

access token 值在 access_token 属性中。

要使用 access token,将其放在带有 Bearer 类型的 Authorization 请求头中,例如:

Authorization: Bearer 29bc6b45-83cd-4050-8c7a-2a8a60adf251

refresh_token 属性包含 refresh token 值。Refresh token 不能像 access token 那样用于访问受保护的资源,但它具有比 access token 更长的生命周期,并且可以用于在当前的 access token 到期时获取新的access token。

使用 refresh token 获取新 access token 的请求必须包含以下参数:

  • grant_type - refresh_token

  • refresh_token - refresh token 值

POST /oauth/token
Authorization: Basic Y2xpZW50OnNlY3JldA==
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&refresh_token=e765446f-d49e-4634-a6d3-2d0583a0e7ea

另请参阅以下与 token 相关的应用程序属性: