.NET ユーザーの作成をちょっとだけ簡単にする方法


ここ数週間、Tech Days 2010、.NET ラボ勉強会、Hosting-Pro 2010 と登壇が続き、少々グロッキー気味でしたが、週末で復調しました。

イベントの登壇は本業とはいえ、私の場合、毎回話す内容がまったく違うジャンルのことがらなので、コンテンツやら資料の準備でなかなか大変だったりします。

さて、それはおいておいて。

このブログで紹介している IIS7 の管理共有サービスを使用して、実際にユーザーに対してのサービスを計画しているパートナー企業様から以下のような質問をいただき調査&検証を行ったのでメモがてら書いておきます。

[ 質問内容 ]
IIS 管理共有で接続したユーザー ( IIS 管理ユーザー ) に、自分の管理しているサイトで .NET 認証を使用できるように設定している。
認証はうまく機能しているが、".NET ユーザー" アカウントを作成する際、入力が面倒な箇所があるので、これを解消したい。
具体的には以下のとおり。

  1. [ 質問 ] と [ 返答 ] を入力不要に
  2. パスワードの形式が複雑なので簡単な命式に
  3. E-Mail アドレスの入力を不要に

IIS7 の ".NET 認証"、".NET ユーザー" についてご存じない方は↓の記事をご参照ください。

『IIS 7 で自由な認証画面を』
http://blogs.msdn.com/osamum/archive/2009/04/23/iis-7.aspx

1 については、プロバイダーを独自に作成する際の、以下の設定で指定可能であり、パートナーさんも自ら解決されておいででしたので、ここでは web.config で可能な設定方法を書いておきます。

プロバイダ作成時の設定

".NET ユーザー" アカウントを作成する際に表示される [ .NET ユーザーの追加 ] ダイアログボックスから [ 質問 ] 、[ 返答 ] のテキストボックスを消すことはできませんが、この入力を任意入力 ( オプション ) 化 させることは可能です。

この作業を行うには web.config ファイルを管理者権限で開き、使用しているメンバシッププロバイダーの設定に requiresQuestionAndAnswer プロパティを追加して値に false を指定します。

以下では独自に作成したプロバイダ myNetSqlMembershipProvider の設定にこの指定を行っています。具体的にはの箇所です。

<system.web>
        <membership defaultProvider="myNetSqlMembershipProvider">
            <providers>
                <add name="myNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
  connectionStringName="LocalSqlServer"
  enablePasswordReset="false"
  enablePasswordRetrieval="false"
  requiresQuestionAndAnswer="false" <—- ①
  minRequiredNonalphanumericCharacters="0"  <—- ②
  minRequiredPasswordLength="1" <—- ②
  requiresUniqueEmail="false" <—- ③ 
  />
            </providers>
        </membership>
    </system.web>

これで、[ .NET ユーザーの追加 ] ダイアログボックスで、[ 質問 ] 、[ 返答 ] のテキストボックスへの入力を省略することが可能になります。

パスワードの形式を簡単な命式に省略するには、同じく使用しているプロバイダの設定を行いますが、ここでは 2 つのプロパティを追加して設定を行います。

パスワードの必要最低限の文字数を指定する minRequiredPasswordLength プロパティと、パスワードに含まれるアルファベット以外の文字の最小数を指定するプロパティです。

前出の設定例では、 minRequiredPasswordLength プロパティに 1 を、minRequiredNonalphanumericCharacters プロパティには 0 を指定し、アルファベット 1 文字でもパスワードの設定ができるよう指定しております。具体的には前出の設定例の の箇所です。

なお、minRequiredPasswordLength プロパティに 0 を設定することはできないので、空のパスワードを許可するようには指定できません。

3 番目の "E-Mail アドレスの入力を不要に" というのは、残念ながら実現できません。(もしかしたらこの地球上のどこかに実現する方法があるのかもしれませんが、それを探し出す労力とそれによって得られる効果を比較すると、少々リーズナブルであるとは言い難いのでここでは考えないことにします。)

わずかながら E-Mail アドレスの入力を簡単にする方法としては、RequiresUniqueEmail プロパティを false に設定するという方法があります。具体的には、前出の設定例の の箇所です。

これはユーザーアカウントの作成の際に入力される E-Mail アカウントの一意性をチェックしないという指定です。

つまりは、すべての.NET ユーザーアカウントに同じ E メールアドレスを指定することが可能です。

この記事を読まれている方には "なんで E-Mail アドレスの入力を割愛する必要が?" と思われるかも知れませんが、外 Web でサイトに認証をかける場合、管理者が必ずしも使用者全員の E-Mail アドレスを把握しているとは限らないという状況があるからです。

また、 E-Mail アドレスはべつの DB で管理しているので、余計な場所にまで保管したくないという意向もあるのかもしれません。

<参考>
『SqlMembershipProvider Members』
http://msdn.microsoft.com/en-us/library/system.web.security.sqlmembershipprovider_members.aspx

 

IIS 管理ユーザーアカウントで、管理共有接続された IIS 管理ツールを使用して ".NET ユーザー" の設定を行う際の注意点 (…な、ながい)

IIS7 に、リモートコンピューターから、IIS 管理ユーザーアカウントを使用して接続すると、IIS 管理ツールでの操作は、サーバー ( IIS7 ) 上では LOCAL SERVICE アカウントに偽装されて実行されます。

つまり、IIS 管理ツールで変更を加えるサーバーリソースには LOCAL SERVICE に対して変更の権限を付与しておく必要があります。

これは Web サイト内のファイル類はもちろんのこと、IIS 管理ユーザーアカウントによる ".NET ユーザー" の管理を想定している場合は、SQL Server の [ ログイン ] に LOCAL SERVICE を追加しておく必要がありますのでご注意ください。

ちなみに、認証プロバイダを独自に作成し、その際に接続文字列に有効な SQL 認証のアカウントを指定している場合は、この設定は必要ありません。( SQL Server 接続時にそのアカウントが使用されるので)

 

Real Time Analytics

Clicky

Comments (0)

Skip to main content