kazuk は null に触れてしまった

C# / .NET 系技術ネタ縛りでお送りしております

ASP.NET メンバーシップ、ロールを使って初期スーパーユーザーが無くて困る


タイトルのような事って起こりませんか?

管理者ロールみたいなの作ったとして、その管理者ロールに最初のユーザーをどうやって入れるねんとか。

IISマネージャがつながるとか、ASP.NETの構成ツールがつながれば、そっちからいかようにもできるんですが、そうもいかない環境ってありますよね。

簡単に言えば ASP.NET を Azure Web Sites で動かしてる時とか。

最初のユーザーを管理者ロールに入れるとかやるとして、ソレってできた瞬間から表に出てる Azure Web Sites でやって安全なん?とかとか。

アプリのつながるDBにユーザーレコード直接作ればいいっちゃ良いんだけど、IP固定してる回線でない場合には、現在IP調べてSQL Azure に一時的にそのIPを許可入れて、レコード作って、ここでIP許可外し忘れると同一プロバイダの誰かが偶然にもつながる穴が残るよねと。

まぁ、諸々面倒なんですわ、ロールベースで管理者ロール作って、しっかり管理系作ったとして最初のスーパーユーザーが居ないって事が。

そうですよね?

そんなわけで作った

要するにDBベースのASP.NET標準のメンバーシップやロールだけだと、初期ユーザーの作成とかがややこしいので、展開されるファイルベースの認証プロバイダがあればサイトが展開された時にはそのファイルに記述されたユーザーは居る事になると。

これをDBベースの認証プロバイダとカスケードしてスーパーユーザー以外はそっちにユーザー登録したり、認証するようにすればいいよねと。

PM> Install-Package ConfigBasedSecurityProviders

やってる事は単純に ExtendedMembershipProvider と RoleProvider の実装ですが、基本的にすべての更新系は基本となるプロバイダに転送し、同様に知らん事の参照系も基本となるプロバイダに流します。

そのうえでXMLで指定された多少の知っている事だけを認証処理したり認定します。

使い方

Nuget からパッケージをインストールすると、bin に認証プロバイダ本体が入ります。そして必要な web.config に対する修正が適用されます。App_Data 配下にサンプルとしてのxml が二つ入ります。あとルートに readme.html が入ります。

web.config の改行とかフォーマッティングが崩れるのは Nuget の仕業っぽいので気になるならオートフォーマットでも適用してください。

App_Data のXMLを修正して、ユーザーとパスワードを設定し、ロールのメンバーを設定します。

設定した XML は admin_users.xml / admin_roles.xml という名前に直せば、デフォルトで入る web.config の修正にあった形になります。逆に web.config 側でのファイルの位置指定を直せば、どこにでもファイルの置場や名前を設定できます。

これでファイルベースの認証を通した上で、必要な構成作業をやったうえで、要らなくなったら NuGet パッケージをアンインストールで取り外してしまってもいいし web.config の要らない所をコメントアウトして無効にしてしまっても良いでしょう。再デプロイでつぶしの反映を忘れずに。

まとめ

ASP.NET アプリケーションをクラウドに入れるのにあんまり安全じゃない事したくないよね。

認証回りの所に派手に作りこみしてバグ残すとセキュリティバグはすごく痛い思いするから初期構成の為に変な事もできないし、つけ外しがちゃんとできる格好でやらないと怖くてアレ。

そういったニーズに答えるパッケージのつもりでございます。

要するに、薄いゴムのアレですよ。うん。

注意事項

状態持たないので、ユーザーのパスワードミスによるロックアウトとかできません。なので強度の低いパスワードでユーザー作っておきっぱなしにすると、プルートフォースでやられる危険があります。

うん百文字のランダムとかプルートフォースされても「何千年頑張るの?」って言えるようにしておくか、初期構成作業を終えたら外すのお勧めです。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。