概要
Zabbix APIの認証トークンの有効期限があるらしいとWebにのっていたのですが、どこにもそれっぽい内容の記事が見つけれらなかったので認証トークンを発行しているuser.loginのphp(CUser.php)を確認しました。
認証トークンが使えなくなった場合
「Session terminated, re-login, please.」のメッセージが発行されるっぽいです
(日本語:セッションが切断されました。再度ログインしてください。)
メッセージを出力するphpはこれらしい
LC_MESSAGES/frontend.po の「Session terminated, re-login, please.」を参照ください
CUser.php
認証トークン有効期限の場所確認
ui/include/classes/api/services/CUser.php
~省略~
private function validateCreate(array &$users) {
~省略~
$api_input_rules = ['type' => API_OBJECTS, 'flags' => API_NOT_EMPTY | API_NORMALIZE, 'uniq' => [['username'], ['alias']], 'fields' => [
'username' => ['type' => API_STRING_UTF8, 'flags' => API_REQUIRED | API_NOT_EMPTY, 'length' => DB::getFieldLength('users', 'username')],
'alias' => ['type' => API_STRING_UTF8, 'flags' => API_DEPRECATED, 'length' => DB::getFieldLength('users', 'username')],
'name' => ['type' => API_STRING_UTF8, 'length' => DB::getFieldLength('users', 'name')],
'surname' => ['type' => API_STRING_UTF8, 'length' => DB::getFieldLength('users', 'surname')],
'passwd' => ['type' => API_STRING_UTF8, 'flags' => API_NOT_EMPTY, 'length' => 255],
'url' => ['type' => API_URL, 'length' => DB::getFieldLength('users', 'url')],
'autologin' => ['type' => API_INT32, 'in' => '0,1'],
'autologout' => ['type' => API_TIME_UNIT, 'flags' => API_NOT_EMPTY, 'in' => '0,90:'.SEC_PER_DAY],
~省略~
‘autologout’ => [‘type’ => API_TIME_UNIT, ‘flags’ => API_NOT_EMPTY, ‘in’ => ‘0,90:’.SEC_PER_DAY],
ここっぽい書きっぷりですけどよくわからないですね
/**
* Check if session id is authenticated.
*
* @param array $session
* @param string $session[]['sessionid'] (required) session id to be checked
* @param bool $session[]['extend'] (optional) extend session (update lastaccess time)
*
* @return array
*/
public function checkAuthentication(array $session): array {
~省略~
if (!$db_sessions) {
self::exception(ZBX_API_ERROR_PARAMETERS, _('Session terminated, re-login, please.'));
}
~省略~
// If user not exists.
if (!$db_users) {
self::exception(ZBX_API_ERROR_PARAMETERS, _('Session terminated, re-login, please.'));
}
~省略~
// Check system permissions.
if (($autologout != 0 && $db_session['lastaccess'] + $autologout <= $time)
|| $usrgrps['users_status'] == GROUP_STATUS_DISABLED) {
DB::delete('sessions', [
'status' => ZBX_SESSION_PASSIVE,
'userid' => $db_user['userid']
]);
DB::update('sessions', [
'values' => ['status' => ZBX_SESSION_PASSIVE],
'where' => ['sessionid' => $sessionid]
]);
self::exception(ZBX_API_ERROR_PARAMETERS, _('Session terminated, re-login, please.'));
}
~省略~
db_sessionsとdb_usersがない場合ってDBアクセスできない時とDBにZabbixユーザない場合かな?
$autologout != 0 && $db_session[‘lastaccess’] + $autologout <= $timeは時間をちゃんと確認しているっポイ。
Zabbix APIの認証トークンの有効期限はあるっぽいけど、詳しくはZabbixのDB見たほうがが早そう。
ひとまず今日はここまで
参考リンク
ありがとうございます。
コメント