リンク:
アリスブログ > 「ALISのAPI」を使用する方法まとめ > 当記事
◆ 【Python】「ALISのAPI」の個人認証(AWSSRP)の準備について
ここでは、「ALISのAPI」を使った個人認証に関することを、軽く説明していきます。
○ 留意事項
・「2018/09/15」に作成された記事です
・Windows10のローカル環境で動作確認をしています
・ALISのパスワードの扱いには、十分に気をつけておいて下さい(サンプルの確認が終わった後は、「PASSWORD = 」の中身を消しておきたいです)
・AWSに関することは、あまりよく知らないので、記事の一部に誤りがあるかもしれません
◆ 個人認証のサンプルソース
ALIS株式会社のリードエンジニアである冨樫さんが、Pythonのサンプルコードをgithubにアップロードしています。
スマートでナイスなソースコードです。個人認証の際に利用してみて下さい。
◆ 準備
上記のプログラムを実行させるためには、「2点」準備しなければならないことがあります。
「ユーザー名とパスワード」を用いることで「ユーザープール認証」をすることができるモジュールです。
コマンドプロンプトで、
pip install warrant
と入力すれば、インストールできます。
(インストールしておかないと、「from warrant.aws_srp import AWSSRP」の部分でエラーが発生します)
・追記:「warrant」のインストールが成功しない(失敗する)理由について
どうやら、このモジュールを「Windows」でインストールする場合は、「Cコンパイラ」が必要になるみたいです。
私の実行環境では、すでに「Visual Studio」をインストールしていたため、エラーが発生しなかったのですが、他のWindowsユーザーの方はエラーが多発していたので、多分、「Cコンパイラ」関係の問題がありそうです。
(※ Windowには「Cコンパイラ」が添付されていません)
この問題を解決するためには、「Build Tools for Visual Studio」の「Visual C++ Build Tools」を先にインストールしておく必要があります。
○ AWSの環境変数の設定
(多分)「AWS 認証情報ファイル」がないと、「id_token = aws.authenticate_user()['AuthenticationResult']['IdToken']」の部分でエラーが生じます。
この問題は、「AWS CLI」を導入していないのであれば、「C:\Users\USERNAME \.aws\」に「credentials」という名前のファイルを作成して、てきとーな「AWS アクセスキー」を記述しておくか、「AWSの環境変数」を設定しておけば、解決可能だったと思います。
私は、「AWS CLI」を入れていないので、「credentials」を作ることにしました。
・やり方
1,コマンドプロンプトを起動して、ディレクトリを「C:\Users\USERNAME」に変更する
(※ 「USERNAME」は任意の名前です)
(※ 「Windowsキー」+「Rキー」を入力した後、「ファイル名を指定して実行」に「cmd」と書いて「コマンドプロンプト」を起動した場合は、多分「C:\Users\USERNAME」が標準のディレクトリになっていたと思います)
2,「mkdir .aws」と入力して、「.aws」フォルダを作成する
ドットが付いたフォルダを、Windowsの「新規フォルダの作成」から作ることはできないので、コマンドプロンプトから作成します。
3,コマンドプロンプトを閉じた後、「C:\Users\USERNAME\.aws」に移動する
ユーザー名のフォルダに「.aws」という名前のフォルダがあるはずなので、その内部に移動します
4,「credentials.txt」を作成する
テキスト内に、
[default]
aws_access_key_id=XXXXXXXXXXXXXX
aws_secret_access_key=YYYYYYYYYYYYYYYYYYYYYYYYYYY
と、そのまま記載して、保存して下さい。
(「XXXXXXXXXXXXXX」のままで問題ありません)
5,「credentials.txt」→「credentials」に変更する
拡張子の「.txt」を消します。
(~/.aws/credentials)
以上です。
「AWSを用いたプログラムの実行」は、とりあえず、指定の文字を記載したファイルが存在していればいいみたいなので、これでエラーを防ぐことが可能です。
◆ 準備を終えた上で、個人認証のサンプルプログラムを実行した場合
ソースコードの中の「USERNAME」と「PASSWORD」を適切なものに変更するだけ、実行できます。
(他の部分を変更する必要はありません)
サンプルプログラムの起動に成功した場合は、ALISの下書きページに、中身のない記事が1つ追加されます。
○ 補足:セキュリティについて
ALISの通信は「https」なので、(送信先のURLが適切である限り、)Pythonからの通信で「ALISのパスワードが抜き取られる」ということは無いと思います。
ただ、「パスワードをプログラムやコマンドプロンプトに記載した状態のまま、スクリーンショットを公開」なんてことをすれば、当然、自分のパスワードが他者にバレてしまうので、その点はご注意下さい。
また、プログラムの実行を終了させるまで、「パスワード」と「アクセストークン」はメモリ上に残っているので、不正プログラム(コンピューターウィルス)のデータ抽出にも気をつけておきたいです。
◆ その他
・AWSとは
「アマゾンウェブサービス」のことです。
ALISは、AWSの仮想サーバーで動いています。
・AWSSRPとは
「AWSのSRP」です。SRPは「セキュリティリモートパスワード」の略。
「Amazon Cognito」のユーザープール認証で使用しているみたいです。
・Amazon Cognitoについて
……まぁ、仕組みをよくわかっていなくても、アクセストークン(id_token)さえ獲得してしまえば、ALISの個人認証系のAPIで、様々なことができると思います。
◆ お礼
今回の件は、ALISハッカー部の「がくしさん」と「ひらいくん」のアドバイスをもらって、理解しました。
お二人に感謝しています。
◆ 「ゆうき」のツイッター