在RESTAPI中放置captcha令牌的最佳位置是哪里

在RESTAPI中放置captcha令牌的最佳位置是哪里,rest,captcha,recaptcha,api-design,Rest,Captcha,Recaptcha,Api Design,我正在设计一个RESTAPI,它允许客户端发布(创建)资源。 让我们调用我的资源是Subscription,我的RESTAPI接受一个名为Subscription POST请求需要与将在服务器端验证的验证码令牌一起发送 我的问题是哪里是放置验证码令牌的最佳位置,我正在考虑一些选项: 直接在订阅中 作为URL中的参数,例如:/subscriptions?captcha_token=abcd1234 作为HTTP头 创建一个新的Dto,该Dto包装订阅和携带字段captchaToken 欢迎提出任何

我正在设计一个RESTAPI,它允许客户端发布(创建)资源。 让我们调用我的资源是
Subscription
,我的RESTAPI接受一个名为
Subscription
POST请求需要与将在服务器端验证的验证码令牌一起发送

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

  • 直接在订阅中
  • 作为URL中的参数,例如:/subscriptions?captcha_token=abcd1234
  • 作为HTTP头
  • 创建一个新的Dto,该Dto包装
    订阅
    和携带字段
    captchaToken
  • 欢迎提出任何其他建议


    谢谢。

    对于任何与身份验证或授权相关的内容,我通常依赖于标题或查询字符串参数

    一般来说,我不喜欢将有效负载与auth相关的材料混合在一起,也不喜欢封装它


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

    如果您的客户端可以修改/发送HTTP头信息,则使用HTTP头是唯一的选项。这种方法不适用于标准浏览器

    您没有筛选资源,因此从REST的角度来看,查询参数没有意义,并且您不希望将captcha答案作为查询参数发送

    通常,用户提交验证码信息(id、答案)和表单数据(有效负载)。您还通常将CAPTCHA与表单一起显示

    因此,最后唯一有用的选择是将captcha信息作为有效负载/表单数据的一部分发送

    是否将数据放入订阅数据取决于您的设计/首选项


    我建议使用
    Subscription(Data)
    SubscriptionRequest
    之类的东西,其中
    SubscriptionRequest
    包含
    SubscriptionData
    和Captha信息(capcha id和答案)

    我不明白如果你要使用Post动词,那么你怎么会使用选项2?但是,撇开您主要关心的问题不谈,这是将令牌信息从客户端传递到服务器的最佳位置,然后从我的观点来看,RequestHeader是最佳位置,因为您既不打算在后端存储,也不打算在以后使用。不分配空间2。如果您使用mapper,那么它将毫无用处。Hi@Aamol,Http POST允许您在URL中包含参数,因此选项2仍然是可行的。