😎
Amplify Libraries API(GraphQL)/Configure authorization modes
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