概要
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'
})