Robloxは各ゲームにシークレットストアを提供しています。シークレットは、外部サービスと認証するために使用するAPIキー、パスワード、アクセストークンなどの機密情報です。たとえば、サードパーティの分析や音楽サービスに接続したい場合、認証のためにAPIキーを使用する必要があります。
APIキーをスクリプトにコピー&ペーストしたり、データストアに追加したりすることもできますが、これらのアプローチには不必要なセキュリティリスクが伴います。より良い解決策は、シークレットストアを使用し、一連の安全な方法を使用してキーにアクセスすることです。
シークレットの追加
シークレットを表示、作成、または編集するには、ゲームのオーナーまたはグループのオーナーである必要があります。ゲームごとに最大500のシークレットを持つことができます。
クリエイターダッシュボードに移動します。
ゲームを選択し、次にシークレット ⟩ シークレットを作成を選択します。
名前、シークレット、および適用されるドメインを入力します。
- 名前はシークレットの一意の識別子として機能するため、説明的なものを推奨します。
- シークレットは最大1,024文字の長さにすることができます。APIキーやアクセストークンはサービスプロバイダーから取得する必要がありますが、シークレットがパスワードの場合は、おそらく自分で作成したものです。
- ドメインには、*(推奨されません)などの制限付きワイルドカード構文や、*.example.comのようにexample.comの任意のサブドメインを指定できます。特定のドメイン(例:my.example.com)の方がさらに良いです。
ローカルシークレット
セキュリティ上の理由から、各ゲームのシークレットストアはライブサーバーまたは共同テスト環境でのみ利用可能です。ローカルプレイテスト中にシークレットにアクセスしようとすると、指定されたキーのシークレットが見つかりませんというエラーが表示されます。クライアントスクリプトからシークレットにアクセスしようとすると、同様のエラーが表示されます。
ローカルテスト用のシークレットを指定するには、Studioに移動し、次にファイル ⟩ エクスペリエンス設定 ⟩ セキュリティに移動します。ローカルシークレットセクションで新しいシークレットを作成したり、既存のシークレットを編集または削除したりできます。
シークレットの使用
ゲーム内でシークレットを使用する前に、Studioのファイル ⟩ エクスペリエンス設定ウィンドウのセキュリティセクションでHTTPリクエストを許可を有効にする必要があります。その後、サーバースクリプト内でHttpService:GetSecret()を呼び出します:
local HttpService = game:GetService("HttpService")
local testSecret = HttpService:GetSecret("test_secret")シークレットストアを使用する魅力の一部は、シークレットを誤って印刷できないことです。シークレット自体の代わりに、次のコードはシークレットを作成するときに提供した名前を出力します:
print(testSecret) --> Secret(test_secret)文字列を直接操作することはできません。代わりに、Secretデータ型を使用すると、シークレットにプレフィックスとサフィックスを追加してURLを形成したり、Bearerのようなコンテンツを挿入したりできます:
local HttpService = game:GetService("HttpService")
local testSecret = HttpService:GetSecret("test_secret")
local prefix = "https://my.example.com/endpoint?apiKey="
local suffix = "&user=username"
local url = testSecret:AddPrefix(prefix)
url = url:AddSuffix(suffix)
print(url) --> https://my.example.com/endpoint?apiKey=Secret(test_secret)&user=usernameシークレットが挿入されたURLができたら、HttpService:RequestAsync()のようなメソッドを使用して標準のHTTPリクエストを行うことができます。もちろん、これらのメソッドを無視して、シークレットをヘッダーに直接挿入することもできます。