Zabbix APIの認証トークン有効期限を調べてみた(CUser.php)

CentOS
スポンサーリンク

概要

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見たほうがが早そう。 ひとまず今日はここまで

参考リンク

CUser.php (Git)

ありがとうございます。

CentOSInfraZabbix4.x
スポンサーリンク
インフラエンジニア|パイナップル星人 ブログ

コメント

タイトルとURLをコピーしました