我即将实现具有多租户的httpbasic + apikey身份验证。 我的意思是......我想创建带有用户名,密码和apikey的输入参数的过程,以便用户可以使用它们自己的凭据,而不仅仅是存储的默认信用。
以下是没有多租户的sql的工作原理。
EXEC SYSADMIN.createConnection("name" => 'webservice1', "jbossCLITemplateName" => 'name1', "connectionOrResourceAdapterProperties" => 'EndPoint=https://api.example.com/api/,SecurityType=HTTPBasic,AuthUserName=[EMAIL]', "encryptedProperties" => 'AuthPassword=[PASSWORD]') ;;
EXEC SYSADMIN.createDataSource("name" => 'webservice1', "translator" => 'name1', "modelProperties" => '', "translatorProperties" => '', "encryptedModelProperties" => '', "encryptedTranslatorProperties" => '') ;;
exec webservice1.invokeHTTP(endpoint=>'2.0/checks',requestHeaders=> App-Key: myapikey1 ,action=>'GET',requestContentType=>'application/xml')
现在我正在尝试创建没有authusername和authpassword的连接,它确实可以正常工作
EXEC SYSADMIN.createConnection("name" => 'webservice1', "jbossCLITemplateName" => 'name1', "connectionOrResourceAdapterProperties" => 'EndPoint=https://api.example.com/api/,SecurityType=HTTPBasic') ;;
EXEC SYSADMIN.createDataSource("name" => 'webservice1', "translator" => 'name1', "modelProperties" => '', "translatorProperties" => '', "encryptedModelProperties" => '', "encryptedTranslatorProperties" => '') ;;
但是我正在尝试使用手动输入的凭据来调用我的网络服务
exec webservice1.invokeHTTP(endpoint=>'2.0/checks',requestHeaders=> AuthUserName: user1 || AuthPassword: pass1 || App-Key: myapikey1,action=>'GET',requestContentType=>'application/xml')
并收到错误:
服务器返回HTTP响应代码:401为URL:https://api.example.com/api//2.0/test1 ** http错误流*** {“错误”:{“statuscode”:401,“statusdesc”:“未经授权”,“errormessage”: “用户凭据丢失”}}
如何正确传递httpbasic auth的用户名和密码,而无需为不同的用户重新创建连接? 请指教。
答案 0 :(得分:0)
我想建议尽管使用自定义基本授权标头,但应包含更多详细信息,例如域,时间戳,标头的计算签名,以便标头的有效性以及可能避免请求重播攻击。
AWS签名模型 http://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html