Asp.Net 認証

やっと認証がまとまった。
正直よくわかってなかったので、すっきりできてよかった。
いい機会だったんだな。

windows認証
フォーム認証
パスポート認証
がある。
パスポート認証は調べなくていいや

http://www.atmarkit.co.jp/fdotnet/aspnet/aspnet17/aspnet17_01.html


●認証 Authentication
ユーザがアクセス権を持つユーザ本人であるか確認する。プロセス。

windows認証
windowsのアカウントで認証する。独自にユーザ管理の仕組みをつくらなくていい。
IISで認証をかけてしまうから、ASP.NETページにアクセスがあったときにはすでに認証済み。
認証プロトコルには
・基本認証
・ダイジェスト認証
・windows統合認証
がある。

ファイルなどのリソースへのアクセスする時に認証したWindowsアカウントのACLがチェックされる。

ASP.NETアプリのためにWindowsアカウントを作るのはよくない
イントラネット向け

フォーム認証
自分で認証を作るのだけど、ASP.NETのサポートが充実している。
IIS認証は匿名アクセスにする。

*偽装
web.configの
configuration/system.web/identity/@impersonate
をtrueにすると、ユーザが偽装され、IISによって認証されたユーザとしてコードが実行される。
フォーム認証では通常匿名アクセスなのでIUSER_XXX(インターネットゲストアカウント)としてコードが実行されるようになる。(これは意味がない)
windows認証だと、WindowsのユーザとしてIISに認証され、コードもWindowsのユーザとして実行されるため便利。

*ただし、偽装を有効にした場合には偽装するユーザがASP.NETのテンポラリディレクトリを読み書きできるようにACLの設定を行う必要がある。

●認定 Authorization
ファイルなどのリソースへのアクセスの可否の確認。

ファイル認定
Windows認証を使っているときだけ使える。
Windows認証にすれば自動的に有効化される。
ファイルなどのリソースへのアクセスする時に認証したWindowsアカウントのACLがチェックされる。
ファイルへのアクセス時に認証したWindowsアカウントでアクセスするわけではない。
アクセスするのはあくまでASPNETアカウント(XPなら、2003はNetwork Service)。
単に認証したWindowsアカウントのACLでチェックをかけるだけ。

URL認定
URLでのアクセス制御
web.configの
configuration/system.web/authorization
で指定。
authorizationで指定すると、web.configのあるディレクトリとそのサブディレクトリに適用される。
サブディレクトリのweb.configで違う設定があればそちらが優先。
?は非認証ユーザを表す。
rolesでロールでの指定もできる。
roleはWindows認証であればWindowsアカウントのグループになる。
フォーム認証でもroleの指定ができるがこちらは自分で管理。
例.

<authorization>
  <allow users="user1" />
  <deny users="*" />
</authorization>

<authorization>
  <deny users="?" />
</authorization>

<authorization>
  <allow roles="DomainName\SampleGroup" />
  <deny users="*" />
</authorization>

<authorization>
  <allow roles="admin" />
  <deny users="*" />
</authorization>