機密情報をUserSecretに移して安全に:実践編
接続文字列やAPIキーなどの機密情報はソースコードの中に含まないし,Gitなどの管理下に含まれないようにする方法として,ローカルにおいてはUserSecretを使うとよい,という内容を書いた↑.
ちょうど,以下の記事でGoogleを使った外部認証について書いたけれど,ClientIdとClientSecretをソースコード内にハードコーディングしているので,当然これではいけないし,GitHubで公開もできない.
お誂え向きということで,UserSecretにClientIdとClientSecretの2つを設定して,ソースコードに機密情報が含まれないようにする.
手順
すでにOpen UserSecrets
拡張をインストールしてあるとする.
secrets.jsonに機密情報を書く
プロジェクトを右クリックしてコンテキストメニューからOpen UserSecrets
を選択してsecrets.jsonを開く.
secrets.jsonに以下のようにGoogle認証に必要な情報を書いておきます.
{ "ExternalAuth":{ "Google":{ "ClientId":"xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com", "ClientSecret":"YYYYYYYYYYYYYYYY" } } }
コマンドラインから確認してみたり.
> dotnet user-secrets list ExternalAuth:Google:ClientSecret = YYYYYYYYYYYYYYYY ExternalAuth:Google:ClientId = xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com OAuthPractice
ちゃんと登録されているようです.
UserSecretから情報を取得
Startup.cs内のConfigureServicesメソッドで,これまではClientIdとClientSecretを直接ハードコーディングしていましたが,ここでConfiguration経由でsecrets.jsonから情報を取得します.
services.AddAuthentication() .AddGoogle(options => { options.ClientId = this.Configuration["ExternalAuth:Google:ClientId"]; options.ClientSecret = this.Configuration["ExternalAuth:Google:ClientSecret"]; });
Configurationから値を取得するキーとしてJSONの階層構造をフラット化した文字列を指定します.
動かす
それでは実行しましょう.
ボタンを押すと,Googleの認証画面が表示されました.
無事に機密情報をプロジェクトの外に出すことができました.
これでGitHubにプッシュすることができます.
今回のソースコードはこちら