Amplify AppSync에서 Cognito 소속 그룹 기반 인증 처리
Amplify의 AppSync에는 코그니토 소속 그룹에 기반한 협착 인증 처리 방법이 기재돼 있다.
구체적으로 이 Cognito User가'Admin'이라는 조합에 들어갈 때만 AppSync의 Query와 Mutation 조작을 할 수 있는 방법을 기재했다.
보태다
Amplify 학습 노트 공개.
나 자신도 학습 과정에서 이해가 부족한 부분이 있다.
기재하는 방법이 반드시 적당한 방법은 아니다.그 뜻을 이해해 주십시오.
필기급 내용이지만 뒷사람에게 도움이 됐으면 좋겠어요.
구상적 상황
다음 Graph QL 모드를 가정합니다.
/amplify/backend/api//schema.graphql
### 1
type Mutation{
functionA(
user: String!
): String @function(name: "functionA-${env}")
}
### 2
type User
@model
@auth(rules: [{ allow: owner, ownerField:"user", provider: userPools }])
@key(fields: ["user"]) {
user: String!
address: String!
email: String!
}
###1
에 기재된 type Mutation functionA
는 Amplify의 람바다 용균기의 기능이다.user
을 매개 변수로 하고 발차기 이름functionA-${env}
의 람다 펀치.반환 값은 String입니다.
여기 있다
1. Cognito가 속한 그룹이 "Admin"인 사용자
2. 매개 변수에 자신의 이름을 입력할 때만
이 Mutation 작업을 제한하고 싶다고 가정하십시오.
※ 람바다 파서는
@auth
카탈로그를 사용해 추가 인증을 받을 수 있습니다.단, 코그니토 그룹의 인가와 파라미터 값에 따라 인가할 수 없다.(그랬을 텐데)※
### 2
와 같이 @model
가 있는 정상적인 모드에서 @auth
지시적ownerField
을 사용하면 파라미터 값에 상응하는 인정을 받을 수 있습니다.하지만 코그니토 그룹의 승인을 받을 수는 없다.(그랬을 텐데)설치 단계
생성
schema.graphql
후 실행$ amplify push
다음 경로에 맵 템플릿을 요청하는 해석기를 만들었습니다.<project-root>/amplify/backend/api/<api-name>/build/resolvers
여기서 인증을 추가하려는 처리만 다음 경로로 복사합니다.<project-root>/amplify/backend/api/<api-name>/resolvers
복사된 해석기를 다음과 같은 내용으로 고쳐 쓰세요.(필요한 경우 변경)
Mutation.functionA.req.vtl
## [Start] Stash resolver specific context.. **
#set( $adminRole = "Admin" ) ## Admin グループを設定**
#set( $myRole = $ctx.identity.groups[0] ) ## 自分の所属グループを取得**
#set( $cognitoUserName = $ctx.identity.username ) ## ログインしているCognitoのユーザ名を取得**
#set( $inputUserName = $ctx.args.user ) ## 引数userに入力しているユーザ名を取得**
## 自分の所属グループが"Admin"ではない、もしくは、Cognitoの認証情報と引数userが一致しない場合は処理を終了
#if( $myRole != $adminRole || $cognitoUserName != $inputUserName )
$util.unauthorized()
#else
$util.qr($ctx.stash.put("typeName", "Mutation"))
$util.qr($ctx.stash.put("fieldName", "functionA"))
{}
#end
## [End] Stash resolver specific context.. **
상기 샘플의 처리 내용은 ## **
에서 총결한 주석을 참조하십시오.의도하지 않은 사용자의 작업에 대해 요청한 Mutation을 실행하지 않고 처리를 중도에 종료합니다.
마지막으로 한 번 더
$ amplify push
하면 구름 위의 자원에 본 해석기의 내용을 반영합니다.절차가 완료되면 기대한 대로 인증이 이뤄진 상태여야 한다.
사이트 제목
AppSync의 해석기는 심오하고 어려워요...
제 글과 같은 건 발견하지 못했지만 앱Sync에서 인증을 실현하는 방법은 많은 것 같아요.
다음은 유용한 링크를 참조하십시오.
Reference
이 문제에 관하여(Amplify AppSync에서 Cognito 소속 그룹 기반 인증 처리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hayate_h/items/73ed67b4027bbe27efea텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)