我正在使用 CloudFormation 为我的认知用户池创建机密应用程序客户端。 我的 cloudformation 资源如下所示:
AppClient:
Type: AWS::Cognito::UserPoolClient
Properties:
ClientName: app-client
UserPoolId: !Ref CognitoInfrastructureUserPool
EnableTokenRevocation: false
AccessTokenValidity: !Ref UserPoolAccessTokenValidity
IdTokenValidity: !Ref UserPoolIdTokenValidity
RefreshTokenValidity: !Ref UserPoolRefreshTokenValidity
TokenValidityUnits:
AccessToken: "hours"
RefreshToken: "hours"
IdToken: "hours"
SupportedIdentityProviders:
- COGNITO
CallbackURLs: !Split [",", !Ref UserPoolCallbackUrls]
LogoutURLs: !If
- HasLogoutUrls
- !Split [ ",", !Ref UserPoolLogoutUrls ]
- !Ref AWS::NoValue
AllowedOAuthFlowsUserPoolClient: true
AllowedOAuthFlows:
- code
- implicit
AllowedOAuthScopes:
- phone
- email
- openid
- profile
- aws.cognito.signin.user.admin
ExplicitAuthFlows:
- ALLOW_CUSTOM_AUTH
- ALLOW_USER_SRP_AUTH
- ALLOW_REFRESH_TOKEN_AUTH
PreventUserExistenceErrors: ENABLED
ReadAttributes:
- address
- birthdate
WriteAttributes:
- address
- birthdate
GenerateSecret: true
我不想使用认知生成 client_secret,而是使用我生成的客户端密钥。可以这样做吗?
此外,是否可以限制具有特定角色的有限用户组对客户端密钥的访问。
很确定不是,因为在控制台中创建应用程序客户端时,您只能选择客户端密钥或无密钥。如果您要生成自己的代码,则需要 AWS 的能力或您的应用程序客户端信任您的代码,而这并不安全。
我认为不可能限制某些用户对秘密的访问,最好的方法是拥有一个有秘密的应用程序客户端和一个没有秘密的应用程序客户端,我很确定一个认知池可以使用 2 个应用程序客户端。