1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【IBM Security Verify】カスタムJSファイルの新規登録方法と画面カスタマイズでの実装例

Posted at

はじめに

IBM Security Verifyのテーマカスタマイズ機能で、Javascriptを新規アップロードできるようになりました。
利用方法についてご紹介いたします。

2025年1月の新機能になります。
image.png

今回は、ユーザーの初回ログイン後に表示されるパスワード変更画面をカスタマイズしてみます。

1.IBM Security VerifyへのJavascriptのアップロード

パスワードの強度をチェックするjavascriptを用意します。

#passwordcheck.js
function checkStrength(pw) {
  let score = 0;
  const feedback = [];

  if (pw.length >= 15) score++; else feedback.push("15文字以上にしてください");
  if (/[a-z]/.test(pw)) score++; else feedback.push("小文字を含めてください");
  if (/[A-Z]/.test(pw)) score++; else feedback.push("大文字を含めてください");
  if (/[0-9]/.test(pw)) score++; else feedback.push("数字を含めてください");
  if (/[^A-Za-z0-9]/.test(pw)) score++; else feedback.push("記号を含めてください");
  if (/(\w{2,})\1+/.test(pw)) {
    score--;
    feedback.push("繰り返しパターンを避けてください");
  }

  const level = ["非常に弱い", "弱い", "普通", "やや強い", "強い", "非常に強い"];
  document.getElementById("result").innerHTML =
    `<strong>強度:</strong> ${level[Math.max(0, score)]}<br>${feedback.join("<br>")}`;
}

100KB以下のファイルをアップロードするコマンドです。
実行後の戻り値は特にありませんでした。

curl -X POST "https://<tenant_name>.verify.ibm.com/template/v1.0/branding/registration/js" --header "Authorization: Bearer <Access_Token>" -F file=@passwordcheck.js

Dropbox製のパスワードチェッカーであるzxcvbn.jsをアップロードしようとしたところ、100KBを超えていたためアップロードできませんでした。

curl -X POST "https://<tenant_name>.verify.ibm.com/template/v1.0/branding/registration/js" --header "Authorization: Bearer <Access_Token>" -F file=@passwordcheck.js
{"messageId":"CSIAZ3036E","messageDescription":"The system cannot upload the compressed file because the file was too large. It exceeded the maximum content size [100] KB."}

アップロードしたファイルをリストします。

curl -X GET "https://<tenant_name>.verify.ibm.com/template/v1.0/branding/registration/js" --header "Authorization: Bearer <Access_Token>"
[{"id":{"tenant":"d44c69df-90d2-4187-863f-b43668cfa6e7","component":"common","name":"passwordcheck.js","revision":1},"contentMaxSize":100,"isServiceTemplate":false}]

アップロードしたファイルの削除です。

curl -X DELETE "https://<tenant_name>.verify.ibm.com/template/v1.0/branding/registration/js/passwordcheck.js" --header "Authorization: Bearer <Access_Token>" 

2.パスワード変更画面のカスタマイズ

テーマに含まれる以下のファイルをカスタマイズします。

  • templates\authentication\login\cloud_directory\password\change_password\default\first_login_change_password.html

修正箇所は3箇所あります。コメント部分を参照ください。

  • javascriptの指定
  • パスワードフィールドにoninputを追加
  • パスワード強度の判定結果を出力する欄を追加
<!DOCTYPE html>
<html>

<head>
	<title id="loginTitle">$CHANGE_PASSWORD_TITLE$</title>

	<base href="/" />

	<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<link rel="shortcut icon" type="image/x-icon" href="usc/favicon.ico" />
	<link rel="stylesheet" href="usc/css/stateless.css" />
	<link rel="stylesheet" href="/template/v1.0/static/theme.css?themeId=@THEME_ID@" />
	<link rel="stylesheet" href="/authsvc/mtfim/sps/static/v1/authsvc.css" />

	<!-- START - IBM Specific -->
	<!-- Please DO NOT CHANGE the IBM Specific <meta> info below, it will affect functionality -->
    <!-- Script variables -->
	<meta name="action" content="@ACTION@">
	<meta name="themeId" content="@THEME_ID@">
	<meta name="errorMessage" content="@ERROR_MESSAGE@">
	<meta name="passwordWarning" content="@PASSWORDWARNING@">
	<!-- END - IBM Specific -->
    <!-- 修正箇所① 以下のJavascriptを追加-->
	<script defer type="text/javascript" src="/template/v1.0/static/js/passwordcheck.js?themeId=@THEME_ID@"></script>

</head>

<body>
	<div class="cs-change-password cs-content">
		@PAGE_HEADER@
		<div>
			<form id="change-password-main-form" class="input-centered" method="POST" action="">
				<input type="hidden" id="operation-change-password" name="operation" value=""/>
				<input type="hidden" name="username" value="@USERNAME@"/>
				<input type="password" id="oldpassword" name="oldpassword" value="@OLDPASSWORD@" autocomplete="off" class="bx--text-input bx--password-input display-none">
				<label class="label" for="newpassword">$CHANGE_PASSWORD_NEW$</label>
                <div class="bx--text-input__field-wrapper">
                  <!-- 修正箇所② oninput="checkStrength(this.value)"を追加 -->
					<input id="newpassword" type="password" name="newpassword" autocomplete="off" oninput="checkStrength(this.value)" class="bx--text-input bx--password-input" tabindex="1">
					<button type="button" id="show-pwd-btn-newpassword" class="bx--text-input--password__visibility__toggle bx--btn bx--btn--icon-only bx--tooltip__trigger bx--tooltip--a11y bx--tooltip--bottom bx--tooltip--align-center pwd-icon-button" >
						<span class="bx--assistive-text">$SHOW_PASSWORD_HELP_TXT$</span>
						<svg class="bx--icon-visibility-on" focusable="false" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" fill="currentColor" width="16" height="16" viewBox="0 0 16 16" aria-hidden="true" >
						  <path id="eyeIconnewpassword" d="M15.5,7.8C14.3,4.7,11.3,2.6,8,2.5C4.7,2.6,1.7,4.7,0.5,7.8c0,0.1,0,0.2,0,0.3c1.2,3.1,4.1,5.2,7.5,5.3c3.3-0.1,6.3-2.2,7.5-5.3C15.5,8.1,15.5,7.9,15.5,7.8z M8,12.5c-2.7,0-5.4-2-6.5-4.5c1-2.5,3.8-4.5,6.5-4.5s5.4,2,6.5,4.5C13.4,10.5,10.6,12.5,8,12.5M8,5C6.3,5,5,6.3,5,8s1.3,3,3,3s3-1.3,3-3S9.7,5,8,5z M8,10c-1.1,0-2-0.9-2-2s0.9-2,2-2s2,0.9,2,2S9.1,10,8,10z"></path>
						</svg>
					</button>
				</div>
                <!-- 修正箇所③ パスワード強度の判定結果出力-->
				<div id="result" style="margin-top:10px; color: red; text-align: left;"></div>
                <label class="label" for="confirmpassword">$CHANGE_PASSWORD_CONFIRM$</label>
				<div class="bx--text-input__field-wrapper">
					<input id="confirmpassword" type="password" name="confirmpassword" autocomplete="off" class="bx--text-input bx--password-input" tabindex="2">
					<button type="button" id="show-pwd-btn-confirmpasword" class="bx--text-input--password__visibility__toggle bx--btn bx--btn--icon-only bx--tooltip__trigger bx--tooltip--a11y bx--tooltip--bottom bx--tooltip--align-center pwd-icon-button" >
						<span class="bx--assistive-text">$SHOW_PASSWORD_HELP_TXT$</span>
						<svg class="bx--icon-visibility-on" focusable="false" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" fill="currentColor" width="16" height="16" viewBox="0 0 16 16" aria-hidden="true" >
						  <path id="eyeIconconfirmpassword" d="M15.5,7.8C14.3,4.7,11.3,2.6,8,2.5C4.7,2.6,1.7,4.7,0.5,7.8c0,0.1,0,0.2,0,0.3c1.2,3.1,4.1,5.2,7.5,5.3c3.3-0.1,6.3-2.2,7.5-5.3C15.5,8.1,15.5,7.9,15.5,7.8z M8,12.5c-2.7,0-5.4-2-6.5-4.5c1-2.5,3.8-4.5,6.5-4.5s5.4,2,6.5,4.5C13.4,10.5,10.6,12.5,8,12.5M8,5C6.3,5,5,6.3,5,8s1.3,3,3,3s3-1.3,3-3S9.7,5,8,5z M8,10c-1.1,0-2-0.9-2-2s0.9-2,2-2s2,0.9,2,2S9.1,10,8,10z"></path>
						</svg>
					</button>
				</div>
				<button id="submit-change-password" class="button" type="submit" value="$CHANGE_PASSWORD_LABEL$" tabindex="3">
				$CHANGE_PASSWORD_LABEL$</button>
				<input id="skipNow" type="submit" value="Skip Now"/>
			</form>
			<div id="password-error-message" class="password-error-message">
				<!-- <img id="alert-img" alt="Alert" src="assets/img/alert_icon.png"/> -->
				<p id="password-error-text" class="password-error-text"></p>
			</div>
		</div>
		<ol class="spaced">
			<!--  START NON-TRANSLATABLE  -->
			[RPT PolicyDetails]
			<li><span data-name="@POLICYMESSAGE@">@POLICYMESSAGE@</span></li>
			[ERPT PolicyDetails]
			<!--  END NON-TRANSLATABLE  -->
		</ol>
		@PAGE_FOOTER@
	</div>
	<!-- Please do not move JS code from here, it may affect functionality -->
	<script type="text/javascript" src="/authsvc/mtfim/sps/static/v1/common.js"></script>
	<script type="text/javascript" src="/authsvc/mtfim/sps/static/v1/basicldapuser_changepassword.js"></script>
</body>

</html>

3.パスワード変更画面のカスタマイズ結果確認

パスワードで文字を入力すると、パスワードの強度が表示されます。
image.png

入力したパスワードの強度に応じて判定結果が変わります。
image.png

image.png

最後に

IBM Security Verifyで、Javascriptファイルを登録する機能を試してみました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?