😎

Amplify Libraries API(GraphQL)/Configure authorization modes

2023/08/06に公開

amplify graphql client

  • appsyncのapiにはデフォルトで認証モードが設定されている
  • appsyncはいくつかの認証モードをapi別で管理することができる。
    • API_KEY
    • AWS_IAM
    • OPENDID_CONNECT
    • AMAZON_COGNITO_USER_POOLS
    • AWS_LAMBDA
  • EX) AWS_IAM認証モード
import { API, GraphQLQuery, GRAPHQL_AUTH_MODE } from '@aws-amplify/api';
import * as mutations from './graphql/mutations';
import { CreateTodoMutation } from './API';

// Creating a post is restricted to IAM 
const createdTodo = await API.graphql<GraphQLQuery<CreateTodoMutation>>({
  query: mutations.createTodo,
  variables: { input: todoDetails },
  authMode: GRAPHQL_AUTH_MODE.AWS_IAM
});
  • graphqloperation関数はqueryと変数を持つオブジェクトを作成するだけなので、authmodeを使用する際はオブジェクトを渡す必要がある。

AWS Lambda

  • AWS Lambda関数を用いて独自のカスタムapi認証ロジックを実装できる。
  • appsync apiのauthmodeとしてlambdaを追加するにはappsyncコンソールの設定セクションで行う。
  • apiリクエストで認証トークンを渡す必要ができるためアプリでトークンの更新を管理する必要がある。
// ...

const getAuthToken = () => 'myAuthToken';
const lambdaAuthToken = getAuthToken();

const createdTodo = await API.graphql<GraphQLQuery<CreateTodoMutation>>({
  query: mutations.createTodo,
  variables: {input: todoDetails},
  authToken: lambdaAuthToken
});
// ...
import { GRAPHQL_AUTH_MODE } from '@aws-amplify/api';
import { CreateTodoMutation } from './API';

const getAuthToken = () => 'myAuthToken';
const lambdaAuthToken = getAuthToken();

const createdTodo = await API.graphql<GraphQLQuery<CreateTodoMutation>>({
  query: mutations.createTodo,
  variables: {input: todoDetails},
  authMode: GRAPHQL_AUTH_MODE.AWS_LAMBDA,
  authToken: lambdaAuthToken
});

Discussion