我需要在向API发送请求时对客户端进行身份验证。客户端有一个API令牌,我正在考虑使用标准Authorization
标头将令牌发送到服务器。
通常此标头用于Basic
和Digest
身份验证。但我不知道是否允许自定义此标头的值并使用自定义身份验证方案,例如:
Authorization: Token 1af538baa9045a84c0e889f672baf83ff24
你会推荐这个吗?或者有更好的方法来发送令牌吗?
答案 0 :(得分:48)
您可以创建自己的使用Authorization:
标头的自定义身份验证架构 - 例如,这就是OAuth的工作原理。
作为一般规则,如果服务器或代理不理解标准标头的值,它们将不管它们并忽略它们。它正在创建您自己的标题键,这通常会产生意外结果 - 许多代理会使用他们无法识别的名称来删除标题。
话虽如此,使用cookie来传输令牌而不是Authorization:
标头可能是个更好的主意,原因很简单,因为cookie是明确设计用来携带自定义值的,而HTTP的规范则是内置的auth方法并没有真正说出任何一种方式 - 如果你想确切地看到它所说的话,have a look here。
关于这一点的另一点是,许多HTTP客户端库都内置了对Digest和Basic auth的支持,但是当尝试在头字段中设置原始值时可能会使生活变得更加困难,而它们都将提供简单的支持cookies,将允许或多或少的任何价值。
答案 1 :(得分:8)
如果是 CROSS ORIGIN 请求请阅读:
我遇到了这种情况,起初我选择使用Authorization
标题,然后在遇到以下问题后将其删除。
Authorization
标头被视为自定义标头。因此,如果使用Autorization
标头设置进行跨域请求,则浏览器会首先发送预检请求。预检请求是OPTIONS方法的HTTP请求,此请求会从请求中删除所有参数。您的服务器需要使用具有自定义标头(Access-Control-Allow-Headers
标头)值的Authorization
标头进行响应。
因此,对于客户端(浏览器)发送的每个请求,浏览器都会发送一个额外的HTTP请求(OPTIONS)。这恶化了我的API的性能。 您应该检查添加此项是否会降低您的性能。作为一种解决方法,我在http参数中发送令牌,我知道这不是最好的方法,但我无法妥协性能。
答案 2 :(得分:5)
这有点过时但可能有其他人在寻找同一问题的答案。您应该考虑哪些保护空间对您的API有意义。例如,您可能希望识别和验证客户端应用程序对API的访问权限,以限制其对已知的已注册客户端应用程序的使用。在这种情况下,您可以使用Basic
身份验证方案将客户端标识符作为用户标识,将客户端共享密钥用作密码。您不需要专有的身份验证方案,只需清楚地标识客户端为每个保护空间使用的身份验证方案。我更喜欢每个保护空间只有一个,但HTTP标准允许每个WWW-Authenticate头响应上的多个身份验证方案和每个响应中的多个WWW-Authenticate头;对于要使用哪些选项的API客户端而言,这会让人感到困惑。保持一致和清晰,然后使用您的API。
答案 3 :(得分:2)
我建议不要对自定义方案名称使用HTTP身份验证。如果你觉得你有一些通用的东西,你可以定义一个新的方案。有关详细信息,请参阅http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p7-auth-latest.html#rfc.section.2.3。
答案 4 :(得分:0)
请在邮递员上面试试: -
在标题部分示例中为我工作..
授权:JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyIkX18iOnsic3RyaWN0TW9kZSI6dHJ1ZSwiZ2V0dGVycyI6e30sIndhc1BvcHVsYXRlZCI6ZmFsc2UsImFjdGl2ZVBhdGhzIjp7InBhdGhzIjp7InBhc3N3b3JkIjoiaW5pdCIsImVtYWlsIjoiaW5pdCIsIl9fdiI6ImluaXQiLCJfaWQiOiJpbml0In0sInN0YXRlcyI6eyJpZ25vcmUiOnt9LCJkZWZhdWx0Ijp7fSwiaW5pdCI6eyJfX3YiOnRydWUsInBhc3N3b3JkIjp0cnVlLCJlbWFpbCI6dHJ1ZSwiX2lkIjp0cnVlfSwibW9kaWZ5Ijp7fSwicmVxdWlyZSI6e319LCJzdGF0ZU5hbWVzIjpbInJlcXVpcmUiLCJtb2RpZnkiLCJpbml0IiwiZGVmYXVsdCIsImlnbm9yZSJdfSwiZW1pdHRlciI6eyJkb21haW4iOm51bGwsIl9ldmVudHMiOnt9LCJfZXZlbnRzQ291bnQiOjAsIl9tYXhMaXN0ZW5lcnMiOjB9fSwiaXNOZXciOmZhbHNlLCJfZG9jIjp7Il9fdiI6MCwicGFzc3dvcmQiOiIkMmEkMTAkdTAybWNnWHFjWVQvdE41MlkzZ2l3dVROd3ZMWW9ZTlFXejlUcThyaDIwR09IMlhHY3haZWUiLCJlbWFpbCI6Im1hZGFuLmRhbGUxQGdtYWlsLmNvbSIsIl9pZCI6IjU5MjEzYzYyYWM2ODZlMGMyNzI2MjgzMiJ9LCJfcHJlcyI6eyIkX19vcmlnaW5hbF9zYXZlIjpbbnVsbCxudWxsLG51bGxdLCIkX19vcmlnaW5hbF92YWxpZGF0ZSI6W251bGxdLCIkX19vcmlnaW5hbF9yZW1vdmUiOltudWxsXX0sIl9wb3N0cyI6eyIkX19vcmlnaW5hbF9zYXZlIjp bXSwiJF9fb3JpZ2luYWxfdmFsaWRhdGUiOltdLCIkX19vcmlnaW5hbF9yZW1vdmUiOltdfSwiaWF0IjoxNDk1MzUwNzA5LCJleHAiOjE0OTUzNjA3ODl9.BkyB0LjKB4FIsCtnM5FcpcBLvKed_j7rCCxZddwiYnU