Api请求验证
Api请求验证分2种情况
- 情况1: 前端html等文件是经过OSROOM系统渲染, 响应回来的页面. 因为html经过了OSROOM服务器Jinjia2模板引擎渲染, 带上了随机生成的csrf_token 所以在html能获取到csrf_token, 具体使用如下教程
- 情况2.客户端为APP或小程序, 或者说html等静态文件不经过OSROOM, 独立隔离. 这时候就要使用JWT方式验证, 具体如下教程
CsrfToken验证
获取与使用CsrfToken
每个经过OSROOM后端的html页面都会带上一个CsrfToken, 具体使用方式如下
- 使用Jinjia2语法获取
{{csrf_token()}}
- 每一个Api的请求都需要带上CsrfToken, 作为验证令牌. 所以可以在html与间写入如下代码
<script type="text/javascript">
//设置csrf token, 否则无法请求api数据(保证请求数据的网页是自己服务器的网页)
var csrftoken = "{{ csrf_token() }}" //获取token
$.ajaxSetup({
beforeSend: function(xhr) {
// 头部带上参数X-CSRFToken, 值为上面通过JinJia2获取到的csrftoken
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
});
</script>
- 浏览器F12可以看到我们写入的代码中的CSRFToken, 如图
JWT验证(Token)
使用说明
- SecretToken与AccessToken用于在无CsrfToken时, 调用API请求的一个客户端令牌, 以验证客户端是否为伪造的.
- SecretToken是长期可用验证令牌(除非你停用或者删除了它), 需要保存在客户端使用, 主要用于获取AccessToken.
- 使用令牌时, 可以使用SecretToken做令牌或者OSR-ClientId与AccessToken组合做令牌(见使用方式).
- 为了减少SecretToken的暴露风险, 发送Api请求时, 尽量使用OSR-ClientId和AccessToken组合作为客户端验证令牌.
- 当没有获取过AccessToken或者AccessToken失效时, 请通过/api/token/access-token获取新的AccessToken (具体请查看/api/token/access-token文档).
- 获取AccessToken时, 只能使用SecretToken作为客户端令牌验证.(建议使用https)
在http请求中设置请求头
OSR-RestToken:"SecretToken xxxxx"
或
OSR-RestToken:"AccessToken xxxxx" 和 OSR-ClientId:"xxxxx"
获取AccessToken
第一次获取AccessToken, 首先去OSROOM管理端获取SecretToken, 如图
然后GET请求/api/token/access-token获取一个新的AccessToken
- 请求时headers参数OSR-RestToken值为SecretToken为客户端令牌, 如图.
- 结果返回AccessToken和CliendId
- 如果请求/api/token/access-token的时候, 有带上OSR-CliendId, 则系统不会生成新的CliendId 如下图, 结果返回的CliendId和请求时带上的一样
请求API获取&修改数据
对于不需要登录验证的请求验证如下:
- headers参数OSR-RestToken值为AccessToken和参数OSR-CliendId值为CliendId
登录获取BearerToken
请求Api(/api/sign-in)获取BearerToken
- 如下图,登录时也headers页需要AccessToken和CliendId作为客户端令牌headers参数OSR-RestToken值为AccessToken和参数OSR-CliendId值为CliendId注意: 该请求还得带上Api请求参数username, password, use_jwt_auth客户端保存好获取到的auth_token(也就是下面要用到的BearerToken)
对于需要登录验证的API请求如下**
- 和上面差不多, 也就多了一个headers参数OSR-BearerToken, 值为登录成功时获取的auth_token
注销登录
注销登录如下, 注销后前面所请求的AccessToken 和 BearerToken将失效