这个问题通常是在使用AWS Amplify构建SSR(Server-Side Rendering服务端渲染)应用程序时出现的,它不支持基本身份验证。要解决这个问题,请将你的应用程序配置更改为使用AWS Cognito进行身份验证,或使用其他的身份验证方法。这是一个使用AWS Cognito和API Gateway的身份验证示例:
首先安装AWS Amplify和AWS CLI:
npm install -g @aws-amplify/cli
npm install aws-cli
然后,使用AWS CLI创建一个新API Gateway:
aws apigateway create-rest-api --name MyApi --region us-east-1
接下来,配置AWS Amplify以使用AWS Cognito进行身份验证。在amplify/backend/auth/myauth/parameters.json文件中,添加以下内容:
{
"UserPoolId": "us-east-1_xxxxxxxxx",
"AppClientId": "xxxxxxxxxxxxxxxxxxxxxxxxxx",
"AppClientSecret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
然后,在amplify/backend/auth/myauth/template.yaml中添加以下内容:
Resources:
MyAuthUserPoolClient:
Type: 'AWS::Cognito::UserPoolClient'
Properties:
AllowedOAuthFlowsUserPoolClient: true
AllowedOAuthScopes:
- 'aws.cognito.signin.user.admin'
ClientName: 'myclient'
GenerateSecret: false
UserPoolId: !Ref UserPool
MyAuthUserPoolDomain:
Type: 'AWS::Cognito::UserPoolDomain'
Properties:
Domain: 'mydomain'
UserPoolId: !Ref UserPool
MyAuthIdentityPool:
Type: 'AWS::Cognito::IdentityPool'
Properties:
AllowUnauthenticatedIdentities: false
CognitoIdentityProviders:
- ClientId: !Ref MyAuthUserPoolClient
ProviderName: !GetAtt 'UserPoolProvider.ProviderName'
IdentityPoolName: 'myidentitypoolname'
MyAuthIdentityPoolRoleMapping:
Type: 'AWS::Cognito::IdentityPoolRoleAttachment'
Properties:
IdentityPoolId: !Ref MyAuthIdentityPool
Roles:
authenticated: !GetAtt 'IdentityPoolRole.Arn'
然后,在amplify/backend/api/myapi/parameters.json文件中添加以下内容:
{
"REST_API_ID": "xxxxxxxxxx"
}
接下来,在amplify/backend/api/myapi/template.yaml中添加以下内容:
Resources: