概要

AWS Cognito を使った認証の処理をサーバー側でしたい場合のサンプルコード

インストール gem install aws-sdk-cognitoidentityprovider

ドキュメント https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/CognitoIdentityProvider.html

ユーザープールの認証フロー https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html

クライアントのインスタンスを生成する

require 'aws-sdk-cognitoidentityprovider'

client = Aws::CognitoIdentityProvider::Client.new(region: 'ap-northeast-1')

ユーザープールを作成する

resp = client.create_user_pool({
  pool_name: 'sample-user-pool',
  policies: {
    password_policy: {
      minimum_length: 6,
      require_uppercase: false,
      require_lowercase: false,
      require_numbers: false,
      require_symbols: false,
    }
  }
})

ユーザープールへアクセスするアプリクライアントを作成する

resp = client.create_user_pool_client({
  user_pool_id: 'ap-northeast-1_XXXXXXXXX',
  client_name: 'sample-client',
  explicit_auth_flows: ["ADMIN_NO_SRP_AUTH"]
})

ユーザーを登録する

client.sign_up(
  client_id: 'XXXXXXXXXXXXX',
  username: 'testuser',
  password: 'password',
  user_attributes: [
    {
      name: 'email',
      value: 'testuser@example.com'
    }
  ]
)

確認コードを検証する

resp = client.confirm_sign_up({
  client_id: 'XXXXXXXXXXXXX',
  username: 'testuser',
  confirmation_code: '123456'
})

ユーザーのログイン

アプリクライアント側でExplicitAuthFlowパラメータにADMIN_NO_SRP_AUTHENTICATIONを設定する必要がある

resp = client.admin_initiate_auth(
  user_pool_id: 'ap-northeast-1_XXXXXXXXX',
  client_id: 'XXXXXXXXXXXXX',
  auth_flow: 'ADMIN_NO_SRP_AUTH',
  auth_parameters: {
    USERNAME: 'sampleuser',
    PASSWORD: 'password'
  }
)

puts resp.authentication_result.access_token

アクセストークンからユーザー情報を取得する

resp = client.get_user({
  access_token: "XXXXXXXXXX"
})

ユーザー情報の一覧を取得する

resp = client.list_users({
  user_pool_id: 'ap-northeast-1_XXXXXXXXX'
})