Amplify AppSync에서 Cognito 소속 그룹 기반 인증 처리

4369 단어 AppSynccognitoamplify
본 보도에 관하여
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의 람바다 용균기의 기능이다.
  • Lambda 회전 변압기 정보
  • Amplify SNS Workshop-timeline 기능: @function
  • API (GraphQL) - Configure Lambda resolvers - AWS Amplify Docs
  • 여기에 스트링형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에서 인증을 실현하는 방법은 많은 것 같아요.
    다음은 유용한 링크를 참조하십시오.
  • API (GraphQL) - Overwrite & customize resolvers - AWS Amplify Docs
  • AWS AppSync 해석기에서는 AWS Cognito를 사용하는 팀과 HTTP 요청 헤더의 승인 처리-필기적인 사고를 써 보았다
  • AppSync+Cognito 인증으로 Takumon Blog 제어
  • 해석기에서 AppSync의 -Qiita 개발
  • 해석기 맵 템플릿 개요 - AWS AppSync
  • Apache Velocity Engine - User Guide
  • 좋은 웹페이지 즐겨찾기