首页 文章

自定义Authorization HTTP标头

提问于
浏览
76

我需要在向API发送请求时对客户端进行身份验证 . 客户端有一个API令牌,我正在考虑使用标准的 Authorization 标头将令牌发送到服务器 .

通常,此标头用于 BasicDigest 身份验证 . 但我不允许't know if I'm自定义此标头的值并使用自定义身份验证方案,例如:

Authorization: Token 1af538baa9045a84c0e889f672baf83ff24

你会推荐这个吗?或者是否有更好的方法来发送令牌?

5 回答

  • 5

    这有点过时但可能有其他人在寻找同一问题的答案 . 您应该考虑哪些保护空间对您的API有意义 . 例如,您可能希望识别和验证客户端应用程序对API的访问权限,以限制其对已知的已注册客户端应用程序的使用 . 在这种情况下,您可以使用 Basic 身份验证方案,将客户端标识符作为用户标识,将客户端共享密钥用作密码 . 您不需要专有的身份验证方案,只需清楚地标识客户端为每个保护空间使用的身份验证方案 . 我更喜欢每个保护空间只有一个,但HTTP标准允许每个WWW-Authenticate头响应上的多个身份验证方案和每个响应中的多个WWW-Authenticate头;对于要使用哪些选项的API客户端而言,这会让人感到困惑 . 保持一致和清晰,然后使用您的API .

  • 48

    我建议不要对自定义方案名称使用HTTP身份验证 . 如果你觉得你有一些通用的东西,你可以定义一个新的方案 . 有关详细信息,请参阅http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p7-auth-latest.html#rfc.section.2.3 .

  • 2

    您可以创建自己的使用 Authorization: 标头的自定义身份验证架构 - 例如,这是OAuth的工作方式 .

    作为一般规则,如果服务器或代理不理解标准头的值,他们将不管它们并忽略它们 . 它正在创建自己的 Headers 键,通常会产生意外的结果 - 许多代理将使用它们无法识别的名称来删除 Headers .

    话虽如此,使用cookie来传输令牌而不是 Authorization: 标头可能是一个更好的主意,原因很简单,因为cookie明确地设计为携带自定义值,而HTTP内置的auth方法的规范并不是真的无论哪种方式 - 如果你想看到它的确切含义,have a look here .

    关于这一点的另一点是,许多HTTP客户端库都内置了对Digest和Basic auth的支持,但是当尝试在头字段中设置原始值时可能会使生活变得更加困难,而它们将为cookie提供简单的支持 . 允许或多或少的任何 Value .

  • 8

    CROSS ORIGIN 请求的情况下,请阅读:

    我遇到了这种情况,起初我选择使用 Authorization Header,然后在遇到以下问题后将其删除 .

    Authorization 标头被视为自定义标头 . 因此,如果使用 Autorization Header设置进行跨域请求,则浏览器首先发送 preflight request . 预检请求是OPTIONS方法的HTTP请求,此请求会从请求中删除所有参数 . 您的服务器需要使用具有自定义标头( Authorization 标头)值的 Access-Control-Allow-Headers 标头进行响应 .

    因此,对于客户端(浏览器)发送的每个请求,浏览器都会发送一个额外的HTTP请求(OPTIONS) . 这恶化了我的API的性能 . 您应该检查添加此项是否会降低您的性能 . 作为一种解决方法,我在http参数中发送令牌,我知道这不是最好的方法,但我无法妥协性能 .

  • 0

    请在邮差上尝试下面: -

    在 Headers 部分示例中为我工作..

    授权:JWTeyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyIkX18iOnsic3RyaWN0TW9kZSI6dHJ1ZSwiZ2V0dGVycyI6e30sIndhc1BvcHVsYXRlZCI6ZmFsc2UsImFjdGl2ZVBhdGhzIjp7InBhdGhzIjp7InBhc3N3b3JkIjoiaW5pdCIsImVtYWlsIjoiaW5pdCIsIl9fdiI6ImluaXQiLCJfaWQiOiJpbml0In0sInN0YXRlcyI6eyJpZ25vcmUiOnt9LCJkZWZhdWx0Ijp7fSwiaW5pdCI6eyJfX3YiOnRydWUsInBhc3N3b3JkIjp0cnVlLCJlbWFpbCI6dHJ1ZSwiX2lkIjp0cnVlfSwibW9kaWZ5Ijp7fSwicmVxdWlyZSI6e319LCJzdGF0ZU5hbWVzIjpbInJlcXVpcmUiLCJtb2RpZnkiLCJpbml0IiwiZGVmYXVsdCIsImlnbm9yZSJdfSwiZW1pdHRlciI6eyJkb21haW4iOm51bGwsIl9ldmVudHMiOnt9LCJfZXZlbnRzQ291bnQiOjAsIl9tYXhMaXN0ZW5lcnMiOjB9fSwiaXNOZXciOmZhbHNlLCJfZG9jIjp7Il9fdiI6MCwicGFzc3dvcmQiOiIkMmEkMTAkdTAybWNnWHFjWVQvdE41MlkzZ2l3dVROd3ZMWW9ZTlFXejlUcThyaDIwR09IMlhHY3haZWUiLCJlbWFpbCI6Im1hZGFuLmRhbGUxQGdtYWlsLmNvbSIsIl9pZCI6IjU5MjEzYzYyYWM2ODZlMGMyNzI2MjgzMiJ9LCJfcHJlcyI6eyIkX19vcmlnaW5hbF9zYXZlIjpbbnVsbCxudWxsLG51bGxdLCIkX19vcmlnaW5hbF92YWxpZGF0ZSI6W251bGxdLCIkX19vcmlnaW5hbF9yZW1vdmUiOltudWxsXX0sIl9wb3N0cyI6eyIkX19vcmlnaW5hbF9zYXZlIjpbXSwiJF9fb3JpZ2luYWxfdmF saWRhdGUiOltdLCIkX19vcmlnaW5hbF9yZW1vdmUiOltdfSwiaWF0IjoxNDk1MzUwNzA5LCJleHAiOjE0OTUzNjA3ODl9.BkyB0LjKB4FIsCtnM5FcpcBLvKed_j7rCCxZddwiYnU

相关问题