StoredProfileAWSCredentials 抱怨它无法在 Web 应用程序中找到配置文件
StoredProfileAWSCredentials complains it cannot find the profile in a Web application
当我从 Web 应用程序中 运行 StoredProfileAWSCredentials
默认构造函数时,我看到返回以下错误:
System.AggregateException: One or more errors occurred. ---> System.ArgumentException: Path cannot be the empty string or all whitespace.
Parameter name: path
at System.IO.Directory.GetParent(String path)
at Amazon.Runtime.StoredProfileAWSCredentials.DetermineCredentialsFilePath(String profilesLocation) in d:\Jenkins\jobs\build-sdkandtools-release\workspace\sdk\src\AWSSDK_DotNet35\Amazon.Runtime\AWSCredentials.cs:line 354
at Amazon.Runtime.StoredProfileAWSCredentials..ctor(String profileName, String profilesLocation) in d:\Jenkins\jobs\build-sdkandtools-release\workspace\sdk\src\AWSSDK_DotNet35\Amazon.Runtime\AWSCredentials.cs:line 300
at Amazon.Runtime.StoredProfileAWSCredentials..ctor(String profileName) in d:\Jenkins\jobs\build-sdkandtools-release\workspace\sdk\src\AWSSDK_DotNet35\Amazon.Runtime\AWSCredentials.cs:line 270
at Amazon.Runtime.StoredProfileAWSCredentials..ctor() in d:\Jenkins\jobs\build-sdkandtools-release\workspace\sdk\src\AWSSDK_DotNet35\Amazon.Runtime\AWSCredentials.cs:line 260
我正在调用这个没有参数的方法。我定义了一个 "default" 配置文件,它在使用时有效。 Web 应用程序 运行 在使用我的凭据的应用程序池中的 IIS 6.1 下运行(因为 AWS 凭据是在我的登录下获得的)。
我尝试使用名称为 "default" 的双参数构造函数和 RegisteredAccounts.json
文件的本地磁盘路径(这是由 VS 2013 的 AWS 工具包扩展为我生成的) .
这是怎么回事,我该如何解决?
您需要在Web.config文件中设置路径:
<appSettings>
<add key="AWSProfilesLocation" value="path\to\RegisteredAccounts.json" />
<add key="AWSProfileName" value="default"/>
<add key="AWSRegion" value="us-west-2" />
</appSettings>
凭据文件应采用以下格式:
[default]
aws_access_key_id = XXXXXXXXXXXXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
另一种选择是将您的密钥直接包含在 web/app.config:
<appSettings>
<add key="AWSAccessKey" value="your key" />
<add key="AWSSecretKey" value="your key"/>
</appSettings>
documentation 中提供了更多详细信息。
我遇到了同样的问题,幸运的是源代码在 GitHub 上开放:
https://github.com/aws/aws-sdk-net/tree/master/AWSSDK_DotNet35
当您使用 SDK 商店时,它会尝试使用以下代码获取 RegisteredAccounts.json 文件的路径:
System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData) + "/AWSToolkit"
在我的本地环境中,它指向我的用户配置文件,类似于 "C:\Users\MyUser\AppData\Local\AWSToolkit"
但在服务器中它返回了一个空字符串,因为我在应用程序池中使用了网络用户,然后我在服务器中为本地用户更改了它,即使路径与我的路径不同之前得到:
"C:\Windows\system32\config\systemprofile\AppData\Local\AWSToolkit"
然后我将 .json 文件复制到那里,但直到我以新用户登录服务器并使用 SDK 的 PowerShell 工具使用以下命令创建一个新文件后才起作用:
设置 AWSCredentials -AccessKey -SecretKey -StoreAs
它在位于用户文件夹的AppData中创建了文件,然后我将它复制到system32中的路径。
然后终于成功了。看起来太麻烦了,但我真的需要加密凭据,当您使用 AWSProfilesLocation 时,您必须在没有任何安全保护的情况下将 UserAcessKey 和 UserSecretKey 存储在纯文本文件中。
当我从 Web 应用程序中 运行 StoredProfileAWSCredentials
默认构造函数时,我看到返回以下错误:
System.AggregateException: One or more errors occurred. ---> System.ArgumentException: Path cannot be the empty string or all whitespace.
Parameter name: path
at System.IO.Directory.GetParent(String path)
at Amazon.Runtime.StoredProfileAWSCredentials.DetermineCredentialsFilePath(String profilesLocation) in d:\Jenkins\jobs\build-sdkandtools-release\workspace\sdk\src\AWSSDK_DotNet35\Amazon.Runtime\AWSCredentials.cs:line 354
at Amazon.Runtime.StoredProfileAWSCredentials..ctor(String profileName, String profilesLocation) in d:\Jenkins\jobs\build-sdkandtools-release\workspace\sdk\src\AWSSDK_DotNet35\Amazon.Runtime\AWSCredentials.cs:line 300
at Amazon.Runtime.StoredProfileAWSCredentials..ctor(String profileName) in d:\Jenkins\jobs\build-sdkandtools-release\workspace\sdk\src\AWSSDK_DotNet35\Amazon.Runtime\AWSCredentials.cs:line 270
at Amazon.Runtime.StoredProfileAWSCredentials..ctor() in d:\Jenkins\jobs\build-sdkandtools-release\workspace\sdk\src\AWSSDK_DotNet35\Amazon.Runtime\AWSCredentials.cs:line 260
我正在调用这个没有参数的方法。我定义了一个 "default" 配置文件,它在使用时有效。 Web 应用程序 运行 在使用我的凭据的应用程序池中的 IIS 6.1 下运行(因为 AWS 凭据是在我的登录下获得的)。
我尝试使用名称为 "default" 的双参数构造函数和 RegisteredAccounts.json
文件的本地磁盘路径(这是由 VS 2013 的 AWS 工具包扩展为我生成的) .
这是怎么回事,我该如何解决?
您需要在Web.config文件中设置路径:
<appSettings>
<add key="AWSProfilesLocation" value="path\to\RegisteredAccounts.json" />
<add key="AWSProfileName" value="default"/>
<add key="AWSRegion" value="us-west-2" />
</appSettings>
凭据文件应采用以下格式:
[default]
aws_access_key_id = XXXXXXXXXXXXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
另一种选择是将您的密钥直接包含在 web/app.config:
<appSettings>
<add key="AWSAccessKey" value="your key" />
<add key="AWSSecretKey" value="your key"/>
</appSettings>
documentation 中提供了更多详细信息。
我遇到了同样的问题,幸运的是源代码在 GitHub 上开放: https://github.com/aws/aws-sdk-net/tree/master/AWSSDK_DotNet35
当您使用 SDK 商店时,它会尝试使用以下代码获取 RegisteredAccounts.json 文件的路径: System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData) + "/AWSToolkit"
在我的本地环境中,它指向我的用户配置文件,类似于 "C:\Users\MyUser\AppData\Local\AWSToolkit"
但在服务器中它返回了一个空字符串,因为我在应用程序池中使用了网络用户,然后我在服务器中为本地用户更改了它,即使路径与我的路径不同之前得到: "C:\Windows\system32\config\systemprofile\AppData\Local\AWSToolkit"
然后我将 .json 文件复制到那里,但直到我以新用户登录服务器并使用 SDK 的 PowerShell 工具使用以下命令创建一个新文件后才起作用: 设置 AWSCredentials -AccessKey -SecretKey -StoreAs
它在位于用户文件夹的AppData中创建了文件,然后我将它复制到system32中的路径。
然后终于成功了。看起来太麻烦了,但我真的需要加密凭据,当您使用 AWSProfilesLocation 时,您必须在没有任何安全保护的情况下将 UserAcessKey 和 UserSecretKey 存储在纯文本文件中。