OpenID と DotNetOpenID を使用して ASP.NET サイトで管理者を認証する安全な方法
-
09-06-2019 - |
質問
SO に勧められて、ユーザー認証に OpenID を使用する ASP.NET サイトを作成しようとしています。これは (MVC.NET ではなく) 通常の WinForms サイトであり、 ドットネットオープンID 認証用のライブラリです。
現在のセッションの "ClaimedID" (OpenIdLogin_LoggedIn イベントでメンバー DotNetOpenId.RelyingParty,OpenIdEventArgs.Response.ClaimedIdentifier として返される) を既知の管理者の OpenID (つまり、私の)?
そうである場合、この ID が表示されても安全ですか (例:オープンソースコード内)、それとも設定ファイルまたはデータベース行に「隠す」必要がありますか?(構成可能にした方が良い設計であることはわかっていますが、私の質問は安全性についてだけです。)
解決
Jarrett は、データベース テーブルの使用についていくつか良いコメントをしています。
もう 1 つの質問に答えるために、いいえ、OpenID をコードに入れることは一般的に機密事項ではありません。サイトにとってロールの設定がやりすぎだと思われる場合は、ClaimedIdentifier に対する単純な同等性チェックが最適です。
他のヒント
私の解決策は、Roles テーブルと同じ考え方に従うことです。ユーザーを認証したら、そのユーザーのロールを検索します。ユーザーが UserRoles テーブルで「管理者」ロールを持っている場合、管理者が実行できることはすべて実行できます。
私のアプリではオープン ID をブロードキャストしません。それらはテーブルに保存されます。さまざまなユーザー状態情報を保存するようにテーブルも変更しているため、アクションの結果ごとに Users テーブルにアクセスします。ホーム ページを除いて、そのテーブルから必要なユーザー情報がいくつかあります。LINQ を使用しているので、シリアル化時にロールのリストをユーザーにロードするために .LoadWith() を組み込みます。