Azn*_*eek 105 rest curl restful-authentication basic-authentication access-token
我目前正在开发一个REST-API,它为开发环境提供HTTP-Basic保护.由于真正的身份验证是通过令牌完成的,我仍然试图找出,如何发送两个授权头.
我试过这个:
curl -i http://dev.myapp.com/api/users \
-H "Authorization: Basic Ym9zY236Ym9zY28=" \
-H "Authorization: Bearer mytoken123"
Run Code Online (Sandbox Code Playgroud)
我可以为我的IP禁用HTTP身份验证,但由于我通常在具有动态IP的不同环境中工作,这不是一个好的解决方案.我错过了什么吗?
Sab*_*san 63
试试这个在url上推送基本身份验证:
curl -i http://username:password@dev.myapp.com/api/users -H "Authorization: Bearer mytoken123"
^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
如果上面的一个不起作用,那么你就没有任何关系.因此,请尝试以下替代方案.
您可以使用其他名称传递令牌.因为您正在处理来自您的应用程序的授权.因此,您可以轻松地将此灵活性用于此特殊目的.
curl -i http://dev.myapp.com/api/users \
-H "Authorization: Basic Ym9zY236Ym9zY28=" \
-H "Application-Authorization: mytoken123"
Run Code Online (Sandbox Code Playgroud)
请注意我已将标题更改为Application-Authorization.因此,从您的应用程序中捕获该标题下的令牌并处理您需要执行的操作.
你可以做的另一件事是,传递token通过POST参数和抓住从服务器端的参数值.例如,使用curl post参数传递令牌:
-d "auth-token=mytoken123"
Run Code Online (Sandbox Code Playgroud)
Jan*_*zak 33
标准(https://tools.ietf.org/html/rfc6750)表示您可以使用:
因此,可以通过URI传递许多Bearer Token,但不鼓励这样做(参见标准中的第5节).
使用 nginx,您可以像这样发送两个令牌(即使它违反标准):
Authorization: Basic basic-token,Bearer bearer-token
Run Code Online (Sandbox Code Playgroud)
只要基本令牌在前,此操作就有效 - nginx 成功将其转发到应用程序服务器。
然后您需要确保您的应用程序可以正确从上述字符串中提取承载。
如果您在两者之间使用反向代理(例如 nginx),则可以定义自定义令牌,例如X-API-Token.
在 nginx 中,您可以将上游代理(您的其余 api)重写为只是 auth:
proxy_set_header Authorization $http_x_api_token;
Run Code Online (Sandbox Code Playgroud)
...而 nginx 可以使用原始 Authorization 标头来检查 HTTP AUth。