我将使用多租户实现httpbasic +每个with身份验证。我的意思是..。我希望用用户名、密码和每个only的输入参数来创建过程,这样用户就可以在自己的凭据中使用它,而不仅仅是在存储的默认磁盘上。
下面是它在没有多租户的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" => '') ;;但是,我尝试用手动输入凭据来调用我的webservice
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":“未经授权”,“错误消息”:“用户凭据丢失”}}
如何正确传递httpbasic的用户名和密码,而不需要为不同用户重新创建连接?请给我建议。
发布于 2016-10-12 15:28:00
我建议,尽管使用了自定义的基本授权头,但是应该包括更多的细节,如域、时间戳、头的计算签名,这样头部的有效性,也可能避免请求重放攻击。
AWS签名模型http://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html
https://stackoverflow.com/questions/39935264
复制相似问题