新しいIPアドレスからログインがあった場合に通知を送る
概要
Kurocoは管理画面へのログイン履歴を取得するAPIを持っています。 こちらのAPIを利用して新しいIPアドレスからログインがあった場合に通知を送る機能の実装方法を紹介します。
学べること
以下の手順で新しいIPアドレスからのログインを検出し、通知を送ります。
APIを作成する
内部処理用のAPI作成
Kuroco内部でのみ利用するエンドポイントはAPIを分けておくことをお勧めします。
そこで、まずは内部利用のためのAPIを新規で作成します。
既に追加済みの場合は次のステップに進んで構いません。
APIの作成
Kuroco管理画面のAPIより「追加」をクリックします。
API作成画面が表示されるので、下記入力し「追加する」をクリックします。
項目 | 設定内容 |
---|---|
タイトル | Internal |
版 | 1.0 |
ディスクリプション | 内部処理用のAPI |
APIが作成されました。
セキュリティの設定
次にセキュリティの設定をします。[セキュリティ] をクリックします。
セキュリティを[動的アクセストークン]に設定して、[保存する]をクリックします。
セキュリティを[動的アクセストークン]に設定後、Login::token
のエンドポイントが無い場合、利用をお勧めされますが、内部利用のみの場合は無視して構いません。
CORSの設定
次にCORSの設定をします。[CORSを設定する] をクリックします。
CORS_ALLOW_ORIGINSの [Add Origin] をクリックし、下記を追加します。
- 管理画面URL
CORS_ALLOW_METHODSの [Add Method] をクリックし、下記を追加します。
- GET
- POST
- OPTIONS
CORS_ALLOW_CREDENTIALSの[Allow Credentials]にチェックが入っていることを確認します。
問題なければ [保存する] をクリックします。
エンドポイントの作成
ログイン履歴を取得するエンドポイントはLoginHistory::listになります。
InternalのAPIから[新しいエンドポイントの追加]をクリックして作成します。
ログイン履歴を取得するエンドポイント
項目 | 設定内容 |
---|---|
パス | login_history |
カテゴリー | 認証 |
モデル | LoginHistory |
オペレーション | list |
self_only | チェックを入れる |
login_type | 0 |
カスタム処理を作成する
エンドポイントの準備ができたら、カスタム処理を書いていきます。
[オペレーション] -> [カスタム処理]をクリックします。
[追加]をクリックして、新しいIPアドレスからログインがあった場合に通知を送るカスタム処理を作成します。
新しいIPアドレスからログインがあった場合に通知を送るカスタム処理
動作としてはまず、ログイン後処理のトリガを利用して、ログインがあった場合にそのIPアドレスを取得します。 次に、IPアドレスでフィルタをして過去のログイン履歴を取得し、結果が1件のみの場合は、新しいIPアドレスからのログインを検出したとして通知を送ります。
以下のように設定します。
項目 | 値 |
---|---|
タイトル | ip_address_login_alert |
識別子 | ip_address_login_alert |
トリガ | ログイン後処理 |
処理 | 以下の内容 |
{* Retrieve information when logged in *}
{api_internal
var='current_log'
status_var='status'
endpoint='/rcms-api/3/login_history'
method='GET'
member_id=$smarty.session.member_id}
{* Retrieve other login histories with the same IP address *}
{* Refer to the second log (login_history_list[1]) because the api_internal retains the log. *}
{assign_array var='queries' values=''}
{assign var='queries.ip_address' value=$current_log.login_history_list[1].ip_address }
{api_internal
var='log_history'
status_var='status'
endpoint='/rcms-api/3/login_history'
method='GET'
queries=$queries
member_id=$smarty.session.member_id}
{if $log_history.pageInfo.totalCnt == 1}
{capture name=mail_body}
A login from a new IP address has been detected.
Please verify if it was you.
IP Address: {$current_log.login_history_list[1].ip_address}
Date and Time: {$current_log.login_history_list[1].login_ymdhi}
Admin Panel URL: {$smarty.const.ROOT_MNG_URL}/management/
{/capture}
{sendmail
var='result'
to=$smarty.session.email
subject="Login detected from a new IP address."
contents=$smarty.capture.mail_body}
{logger msg1="Login detected from a new IP address." msg2=$current_log.login_history_list[1]}
{/if}
Smartyなどで内部的にログインをすると、127.0.0.1
やKurocoのリクエスト元IPアドレスがログに残ります。
上記のコードでも、認証ありのapi_internal
で内部ログインのログが残るため考慮して利用するデータを選択しています。
Kurocoのリクエスト元IPアドレスを確認したい場合はサポートまでご連絡ください。
{logout}のSmartyプラグインを設定すると強制的にログアウトさせることができます。
ログイン許可IPをメンバー情報に持たせる等の対応と合わせて、新しいIPアドレスの認証機能を実装可能です。
動作確認をする
以上で新しいIPアドレスからのログインを検出する設定は完了です。
普段と違う環境からログインをして、通知が届くことを確認します。
想定通りに設定できていれば以下のように通知が届きます。
関連ドキュメント
サポート
お探しのページは見つかりましたか?解決しない場合は、問い合わせフォームからお問い合わせいただくか、Slackコミュニティにご参加ください。