TL;DR: есть ли способ установить пользовательские области клиента приложения через cli или sdk?
Я пытаюсь автоматизировать развертывание Cognito с помощью CloudFormation. Я уже сделал несколько пользовательских ресурсов, так как не все поддерживается. Для этого я использую AWS JS SDK. Я хочу установить «Разрешенные настраиваемые области» для клиентов приложений в определенном пуле пользователей. Однако я не могу найти, как это сделать, ни в одной документации, которую предоставляет AWS. Документы CLI говорят только об этом в документах здесь Документы Cognito-user-identity:
AllowedOAuthScopes
A list of allowed OAuth scopes. Currently supported values are "phone", "email", "openid", and "Cognito".
Упомянутые области являются областями по умолчанию, которые всегда доступны в пользовательском пуле. Но я также использую настраиваемые области действия, предоставляемые определенным мной настраиваемым сервером ресурсов. Они выглядят так: resourceServer.com/scope
. Я не могу найти никаких документов по настройке этих областей.
Итак, есть ли способ установить пользовательские области через cli или sdk?
Пользовательская область поддерживается в поле AllowedOAuthScopes
.
Чтобы обновить клиент пользовательского пула через CLI: https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool-client.html (проверьте вариант --allowed-o-auth-scopes)
См. пример формирования облака ниже
UserPoolResourceServer:
Type: AWS::Cognito::UserPoolResourceServer
Properties:
Identifier: users
Name: User API
UserPoolId: !Ref UserPool
Scopes:
- ScopeName: "write"
ScopeDescription: "Write access"
- ScopeName: "read"
ScopeDescription: "Read access"
UserPoolClientAdmin:
Type: "AWS::Cognito::UserPoolClient"
Properties:
AllowedOAuthFlows:
- client_credentials
AllowedOAuthFlowsUserPoolClient: true
AllowedOAuthScopes:
- users/read
- users/write
Для всех, кто приходит сюда в поисках решения, следуйте примеру @JohnPauloRodriguez шаблон. Но вам может понадобиться добавить ключ атрибута DependsOn
в шаблон UserPoolClient
, чтобы он работал.
Причина в том, что сначала должны существовать Resource Server
с этими пользовательскими областями, и только тогда мы можем ссылаться на них в клиенте. Согласно Документы по формированию облака:
With the DependsOn attribute you can specify that the creation of a specific resource follows another. When you add a DependsOn attribute to a resource, that resource is created only after the creation of the resource specified in the DependsOn attribute.
Таким образом, шаблон для UserPoolClient
станет следующим:
CognitoUserPoolClient:
Type: AWS::Cognito::UserPoolClient
DependsOn: UserPoolResourceServer
Properties:
UserPoolId: !Ref UserPool
AllowedOAuthFlowsUserPoolClient: true
AllowedOAuthFlows:
- code
AllowedOAuthScopes:
- users/read
- users/write