我目前正在开发一个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的不同环境中工作,这不是一个好的解决方案.我错过了什么吗?
rest curl restful-authentication basic-authentication access-token
对于我们的api用户,我们需要两种身份验证:
标准挑战与响应是通过WWW-Authenticate
和Authorization
Headers 处理的.我想重用这个.
我有以下用例:在第一级我们验证api用户(例如移动设备),对于一些api-actions我们还需要验证用户(例如移动设备的用户).因此,我们有一个特殊情况,我们需要"同时"两个身份验证方案.
查看http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html我看不到在"授权"标题中有两个不同的方案是可能的.
// I just made up delimiter ';'
Authorization: Digest .... ; CustomXXX ...
我是否正确,如果有的话还有其他选择吗?
我的前端应用程序使用gmail帐户进行身份验证.
我在身份验证成功后检索id_token,并将其作为授权标头发送为承载令牌.
授权承载token_id
在nodejs服务器端,我调用以下方法来验证令牌.
exports.verifyUser = function(req, res, next) {
var GoogleAuth = require('google-auth-library');
var auth = new GoogleAuth();
var client = new auth.OAuth2(config.passport.google.clientID, config.passport.google.clientSecret, config.passport.google.callbackURL);
// check header or url parameters or post parameters for token
var token = "";
var tokenHeader = req.headers["authorization"];
var items = tokenHeader.split(/[ ]+/);
if (items.length > 1 && items[0].trim().toLowerCase() == "bearer") {
token = items[1];
}
if (token) { …
Run Code Online (Sandbox Code Playgroud) 由于一些组织限制,我的 DNS 服务器在将请求传递到服务器之前会执行基本的身份验证凭据检查。这是为了避免不需要的请求到达应用程序服务器。
为了正确加载应用程序的公共部分,我已将 Auth-Headers 添加到应用程序层的请求中,以便只有第一个/新的命中需要凭据
但是我无法登录并查看网站的私人部分。
我有一个在 docker 容器中运行的 keycloak,虽然当我在组织网络内部时它工作正常,但是从网络外部我在 auth/admin/master/console/whoami 请求上收到 401(未经授权)。
我可以看到,对于该请求,用 keycloak 身份验证的令牌替换了授权标头,因此该请求被 DNS 阻止,并且永远不会到达我的服务器。
我该如何解决这个问题?我如何告诉 keycloak 在其请求中发送另一个授权标头及其标头。像这里那样多个 HTTP 授权标头?(如果这确实是一个解决方案?)
rest ×2
access-token ×1
api ×1
curl ×1
http ×1
javascript ×1
keycloak ×1
node.js ×1
security ×1