httpbasic + apikey和多租户

时间:2016-10-08 17:27:06

标签: multi-tenant http-basic-authentication

我即将实现具有多租户的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的用户名和密码,而无需为不同的用户重新创建连接? 请指教。

1 个答案:

答案 0 :(得分:0)

我想建议尽管使用自定义基本授权标头,但应包含更多详细信息,例如域,时间戳,标头的计算签名,以便标头的有效性以及可能避免请求重播攻击。

AWS签名模型 http://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html