哪里是将验证码令牌放入REST API的最佳位置

时间:2017-05-25 06:41:18

标签: rest captcha recaptcha api-design

我正在设计一个允许客户端POST(创建)资源的REST API。 让我的资源调用 public GetJobsListExcel(jobs: JobViewModel[]): Promise<Result> { var JobIds: number[] = []; var headers = new Headers(); headers.append('Content-Type', 'application/json') jobs.forEach(x => JobIds.push(x.JobId)); return this.http.post(this.jobsUrl + "/jobs-list-excel", { jobIds: JobIds, }, { headers: headers }) .toPromise() .then(response => response.json() as Result); } ,我的REST api接受名为Subscription的Dto POST请求需要与将在服务器端验证的验证码令牌一起发送。

我的问题是放置验证码令牌的最佳位置,还有一些我正在思考的选项:

  1. 直接在Subscription
  2. 作为URL中的参数,例如:/ subscriptions?captcha_token = abcd1234
  3. 作为HTTP标头
  4. 创建一个包含Subscription并携带字段Subscription
  5. 的新Dto

    欢迎任何其他建议。

    谢谢。

2 个答案:

答案 0 :(得分:1)

对于任何相关的身份验证或授权,我通常依赖于头或查询字符串参数。

一般情况下,我不想将有效负载与auth相关材料混合,也不喜欢将其封装起来。

将它放在HTTP标头中或作为查询字符串参数,可以为您提供良好的隔离。此外,由于它独立于请求体,因此您可以为每个API调用实现更广泛的身份验证控制,而不依赖于请求体的存在(对于GET请求来说非常重要,而GET请求无论如何都不应该携带请求体)。

答案 1 :(得分:1)

如果客户端可以修改/发送HTTP标头信息,则只使用HTTP标头。此方法不适用于标准浏览器。

您没有过滤资源,因此从REST角度来看,查询参数没有意义,并且您不希望将验证码答案作为查询参数发送。

通常,一个人将验证码信息(id,answer)与表格数据(有效载荷)一起提交。您通常还会在表单中显示验证码。

所以最后唯一有用的选择是将验证码信息作为有效载荷/表单数据的一部分发送。

如果您将数据放入Subscription DTO,则取决于您的设计/偏好。

我建议使用Subscription(Data)SubscriptionRequest之类的内容,SubscriptionRequest包含SubscriptionData和Captha信息(capcha id and answer)< / p>