【发布时间】:2017-06-06 05:48:38
【问题描述】:
我在我的移动应用程序中实施了 Amazon SimpleDB,并使用凭证文件中的秘密访问密钥使其全部运行。据我所知,这对移动应用程序不起作用且不安全,因此我研究了使用 Cognito 来验证用户并授予他们对 SimpleDB 的访问权限。
我让 Cognito 正确连接和同步,但由于某种原因,当我将凭据传递给新的 AmazonSimpleDBClient 然后调用选择表达式时,它会弹出“参数不能为空”消息。
我是这样称呼它的:
//Connect to the DB
var sdb = new AmazonSimpleDBClient(
credentials: Credentials,
region: RegionEndpoint.USWest2);
//Check if this user has any bots yet
string selectExpression = "Select count(*) From Bots where UserName = '" + username + "'";
var selectRequestAction = new SelectRequest { SelectExpression = selectExpression };
var selectResponse = sdb.Select(selectRequestAction);
这就是凭据的设置方式:
private CognitoAWSCredentials Credentials
{
get
{
if (_credentials == null)
_credentials = new CognitoAWSCredentials("IDENTITY_POOL_ID", RegionEndpoint.APSoutheast2);
return _credentials;
}
}
我似乎找不到与此问题相关的任何内容,甚至找不到任何人试图像这样使用 SimpleDB - 他们似乎都使用硬编码凭据,同时说它不安全......
编辑(完全错误) ArgumentNullException:参数不能为空。 参数名称:key System.Collections.Generic.Dictionary`2[System.Type,Amazon.Runtime.IExceptionHandler].TryGetValue(System.Type 键,IExceptionHandler& 值)(位于 /Users/builduser/buildslave/mono/build/mcs/class/corlib/ System.Collections.Generic/Dictionary.cs:588) Amazon.Runtime.Internal.ErrorHandler.ProcessException (IExecutionContext executionContext, System.Exception 异常) (在 E:/JenkinsWorkspaces/v3-stage-release/AWSDotNetPublic/sdk/src/Core/Amazon.Runtime/Pipeline/ErrorHandler/ErrorHandler.cs :202) Amazon.Runtime.Internal.ErrorHandler.InvokeSync (IExecutionContext executionContext) (在 E:/JenkinsWorkspaces/v3-stage-release/AWSDotNetPublic/sdk/src/Core/Amazon.Runtime/Pipeline/ErrorHandler/ErrorHandler.cs:78) Amazon.Runtime.Internal.PipelineHandler.InvokeSync (IExecutionContext executionContext) (在 E:/JenkinsWorkspaces/v3-stage-release/AWSDotNetPublic/sdk/src/Core/Amazon.Runtime/Pipeline/PipelineHandler.cs:57) Amazon.Runtime.Internal.CallbackHandler.InvokeSync (IExecutionContext executionContext) (在 E:/JenkinsWorkspaces/v3-stage-release/AWSDotNetPublic/sdk/src/Core/Amazon.Runtime/Pipeline/Handlers/CallbackHandler.cs:45) Amazon.Runtime.Internal.PipelineHandler.InvokeSync (IExecutionContext executionContext) (在 E:/JenkinsWorkspaces/v3-stage-release/AWSDotNetPublic/sdk/src/Core/Amazon.Runtime/Pipeline/PipelineHandler.cs:57) Amazon.Runtime.Internal.Signer.InvokeSync (IExecutionContext executionContext) (在 E:/JenkinsWorkspaces/v3-stage-release/AWSDotNetPublic/sdk/src/Core/Amazon.Runtime/Pipeline/Handlers/Signer.cs:38) Amazon.Runtime.Internal.PipelineHandler.InvokeSync (IExecutionContext executionContext) (在 E:/JenkinsWorkspaces/v3-stage-release/AWSDotNetPublic/sdk/src/Core/Amazon.Runtime/Pipeline/PipelineHandler.cs:57) Amazon.Runtime.Internal.CredentialsRetriever.InvokeSync (IExecutionContext executionContext) (在 E:/JenkinsWorkspaces/v3-stage-release/AWSDotNetPublic/sdk/src/Core/Amazon.Runtime/Pipeline/Handlers/CredentialsRetriever.cs:72) Amazon.Runtime.Internal.PipelineHandler.InvokeSync (IExecutionContext executionContext) (在 E:/JenkinsWorkspaces/v3-stage-release/AWSDotNetPublic/sdk/src/Core/Amazon.Runtime/Pipeline/PipelineHandler.cs:57) Amazon.Runtime.Internal.RetryHandler.InvokeSync (IExecutionContext executionContext)(在 E:/JenkinsWorkspaces/v3-stage-release/AWSDotNetPublic/sdk/src/Core/Amazon.Runtime/Pipeline/RetryHandler/RetryHandler.cs:74)
任何帮助将不胜感激。
谢谢
【问题讨论】:
-
它告诉你哪个字段不能为空?究竟是什么错误信息?
-
它没有告诉我哪个字段为空。这似乎是 sdb.Select 函数中的内部错误。如果有机会,我会发布错误的完整详细信息。
-
我在描述中发布了完整的错误,不适合发表评论。干杯
-
我认为我的引用可能存在一些问题,这突然出现,我不确定为什么:错误 13 类型“Amazon.Runtime.AmazonWebServiceResponse”是在一个程序集中定义的未参考。您必须添加对程序集“AWSSDK.Core, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604”的引用。我已经安装了那个参考,所以我不知道这条消息在说什么。顺便说一句,这是一个 Unity 项目,我不知道这是否会有所不同。
标签: c# amazon-web-services credentials amazon-cognito amazon-simpledb