APIキー形式を確認:接頭辞・長さ・文字セット
キーが決められた接頭辞で始まり、接頭辞を含めてちょうど18文字で、その後が英数字だけなら合格です。途中で切れたキー、空白入りのキー、別環境のキーを早めに見つけられます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
処理はブラウザ内で完結します。ファイルは送信されません。無料でご利用いただけます。
ネットワーク通信や発行元での認証は行わず、形式が一致しても有効なキーであるとは判定しません。設定やデプロイに認証情報を保存する前に、途中で切れた値、余分な空白、コピー時の破損、別環境のキーなどを見つけるためにお使いください。
期待する形式を指定します
検査対象を <code>key</code> に入れ、要件全体を <code>pattern</code> に指定してください。パターンには <code>prefix</code>、<code>length</code>、<code>charset</code> の3項目が必要です。
長さは秘密部分だけではなく、接頭辞を含むJavaScript文字列全体を意味します。文字セットは、正しい接頭辞の後ろにある部分へ適用されます。発行元独自の文字体系には、許可する文字をすべて並べた文字列も指定できます。
接頭辞がない場合も、空文字列として項目を残してください。3条件をまとめたパターンは必須であり、長さだけの確認を完全な検証と誤認することを防ぎます。処理を予測可能に保つため、長さの上限は10,000文字です。
各判定を個別に確認します
最上位の <code>valid</code> は、3つの検査がすべて成功した場合だけ真になります。対象のキー自体は応答に含まれません。接頭辞が不一致なら秘密部分の開始位置を安全に推測できないため、文字セット検査は入力全体を対象にします。
このため複数の判定が同時に失敗する場合があります。結果は決定的で、時刻、乱数、発行元の状態、通信状況には左右されません。偽という結果は形式の不一致だけを示し、失効や無効を意味しません。
安全な境界で形式を確認します
キーを設定ストア、デプロイ変数、コマンドライン処理、連携フォームへ渡す直前に形式を検査すると効果的です。発行サービスへ認証情報を送らずに構造上の誤りを早期発見できます。一致は予備確認としてのみ扱ってください。
キーの存在、想定アカウントへの所属、必要な権限、有効期限、失効状態は証明できません。それらの確認には、明示的に許可された別の認証処理が必要です。完全なキーや入力を、アプリケーションログ、分析イベント、問い合わせ、エラー追跡へ記録しないでください。
画面では元の値を隠し、判定と長さだけを表示します。パターンは発行元の最新資料に基づいて定義し、認証情報の形式が変わった際に見直してください。
活用例
デプロイ変数を保護します
切れたキー、空白付きのキー、別環境のキーをデプロイ開始前に拒否します。
連携フォームを検証します
認証を試さず、接頭辞、長さ、不正文字について正確に案内します。
設定移行を確認します
移行した秘密情報を出力せず、期待する構造が保たれているか確認します。
よくある質問
長さには何が含まれますか?
接頭辞と秘密部分を含むJavaScript文字列全体の正確な長さです。
合格ならアクセスキーは使えるということですか?
いいえ。確認できるのはキーの形だけです。キーが実在するか、正しいアカウントのものか、権限が適切か、期限切れや無効化されていないかは、発行元のサービスでしか確かめられません。
確認中にキーがどこかへ送られますか?
いいえ。確認はネットワーク通信を行わず、キーを発行した事業者にも接続しません。結果にもキー自体は表示されないため、秘密を見せずに結果を共有できます。
接頭辞だけが違うのに、複数の項目が不合格になるのはなぜですか?
接頭辞が一致しないと秘密部分の始まりが分からないため、キー全体の文字を調べます。そのため接頭辞の不一致に文字の不一致が加わることがあり、本当の原因を見つける手がかりになります。
どの文字セットを選べますか?
英数字、小文字と数字、大文字と数字、十六進数、小文字の十六進数、Webアドレス向けのBase64から選べます。発行元が認める文字の一覧をそのまま指定することもできます。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/security/api-key-format-validate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"key":"sk_live_Ab3dE5fG7h","pattern":{"prefix":"sk_live_","length":18,"charset":"alphanumeric"}}'const res = await fetch("https://api.kit.forhosting.com/security/api-key-format-validate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"key": "sk_live_Ab3dE5fG7h",
"pattern": {
"prefix": "sk_live_",
"length": 18,
"charset": "alphanumeric"
}
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/security/api-key-format-validate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"key": "sk_live_Ab3dE5fG7h",
"pattern": {
"prefix": "sk_live_",
"length": 18,
"charset": "alphanumeric"
}
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/security/api-key-format-validate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"key":"sk_live_Ab3dE5fG7h","pattern":{"prefix":"sk_live_","length":18,"charset":"alphanumeric"}}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"key":"sk_live_Ab3dE5fG7h","pattern":{"prefix":"sk_live_","length":18,"charset":"alphanumeric"}}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/security/api-key-format-validate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"key": "sk_live_Ab3dE5fG7h",
"pattern": {
"prefix": "sk_live_",
"length": 18,
"charset": "alphanumeric"
}
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "security.api_key_format_validate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
APIキーが有効かどうかは発行サービスだけが確認できますが、多くのキーには判別可能な形式があります。この検証ツールは、必須の接頭辞、全体の正確な長さ、接頭辞以降で許可される文字を確認します。
期待する形式を指定します
定義済みの値として <code>alphanumeric</code>、<code>lowercase_alphanumeric</code>、<code>uppercase_alphanumeric</code>、<code>hex</code>、<code>lowercase_hex</code>、<code>base64url</code> を利用できます。
各判定を個別に確認します
応答には <code>has_prefix</code>、<code>length_matches</code>、<code>charset_matches</code> も個別に含まれるため、画面上で修正箇所を正確に案内できます。<code>actual_length</code> と <code>expected_length</code> を比べれば、途中で切れた値や余分に貼り付けられた文字が分かります。文字体系が合わない場合、<code>invalid_characters</code> は許可されない各文字を最初に現れた順で1回ずつ示します。
安全な境界で形式を確認します
決定的な実装はブラウザー内でローカルに動作し、自動処理では1回 $0.002 のAPIを利用できます。
技術的な質問
有効という結果ならAPIキーは使用できますか?
いいえ。指定形式との一致だけを示します。発行元への問い合わせや認証は行いません。
利用できる定義済み文字セットは何ですか?
alphanumeric、lowercase_alphanumeric、uppercase_alphanumeric、hex、lowercase_hex、base64url、または許可文字を明記した文字列を利用できます。
応答にAPIキーが含まれますか?
いいえ。判定情報と重複しない不正文字だけを返し、対象のキーは返しません。
パターンを指定しないとどうなりますか?
接頭辞、長さ、文字セットが必須のため、invalid_input エラーになります。
APIの利用料金はいくらですか?
1回のリクエストは $0.002 です。同じ決定的な検証をブラウザー内でローカル実行することもできます。