トップ回答者
@RAZORでのWindowsアカウント取得

質問
-
お世話になっております。
VS2010にてWebアプリを開発しています。
WebConfigにて<authentication mode="Windows"/>として、@User.Identity.Nameをページに記述すると
MVCではWindowsアカウント名が返ってきます。
しかしながら、MVCでないWebサイトではブランクが返ってきます。これは仕様なのでしょうか?
また、何か設定を行えば、Windowsアカウント名を取得することができるのでしょうか?※「MVCでないWebサイト」とは、提供されている「ASP.NET Webサイト(Razor)」で作成されるWebサイトのことです。
CLASSIC ASPに代替するものとしてMVCでない@RAZOR記法を候補としております。社内向けなのでWindowsアカウント
による制御を行っていることが多いので、どうしてもWindowsアカウントを取得したいのです。よろしくお願いいたします。
回答
-
> StarterSite.mdfによるログイン管理は考えておりません。
こちらは、ちゃんと無効になっていますか? ASP.NET MVC ではメンバシップや認証関連が従来通りですが、website では簡易プロバイダが準備されているので、明示的に無効化しないとダメかもしれません。(実際に使ったことないのでなんですが)
以下の点を、再確認してみてください。
- ホスト (IIS) 側で、Windows 認証が有効になっているか
web.config の <system.webServer> にて <windowsAuthentication enabled="true" /> - ホスト (IIS) 側または、ASP.NET 側で匿名アクセスが無効になっているか
ホスト側で無効にするなら web.config の <system.webServer> にて <anonymousAuthentication enabled="false />
ASP.NET 側で無効にするなら web.config の <authorization> にて <deny user="?" /> - ASP.NET 側の認証モードが Windows になっているか
web.config の <authentication> にて mode="Windows" - ASP.NET 側で自動フォーム認証が無効になっているか
web.config の <appSettings> にて <add key="autoFormsAuthentication" value="false" /> - ASP.NET 側で簡易メンバシッププロバイダが無効になっているか
web.config の <appSettings> にて <add key="enableSimpleMembersip" value="false" />
※ system.webServer の設定は、IIS7 や Express 用ですので、あくまで補足です
WindowsTokenProvider によるアクセス制限を行うためには、SimpleRoleProvider も無効化する必要があるかもしれません。
- 回答としてマーク SayBad 2011年3月22日 6:20
- ホスト (IIS) 側で、Windows 認証が有効になっているか
すべての返信
-
Takaokaさん、ありがとうございます。
イントラネット専用のWebアプリなのでStarterSite.mdfによるログイン管理は考えておりません。
なので、WebSecurity.IsAuthenticatedは常にFalseです。仮にStaterSite.mdfで管理してもUser.IsInRoleにてActive Directoryのセキュリティグループのメンバーか
どうかの判断はできませんよね。WebフォームだけのサイトやMVCのサイトではUser.Identity.Nameは利用者のWindowsアカウントが
表示されます。@Razor構文の非MVCのときだけUser.Identity.Nameがブランクになります。 -
> WebアプリなのでStarterSite.mdfによるログイン管理は考えておりません
Web アプリケーションによるログイン管理の話ではなく、Web サイト(IIS) へのアクセスが非Razorの時と同じ設定になっていて、暗黙的なログイン処理がされていますか? という話です。authentication mode が Windows の場合、User にプリンシパルを設定しているのは IIS なので、IIS 側で匿名アクセスになるような設定になっているのではないか?等と思いました。
> StaterSite.mdfで管理してもUser.IsInRoleにてActive Directoryのセキュリティグループの
> メンバーかどうかの判断はできませんよね。標準の WindowsTokenRoleProvider は、Active Directory への問い合わせ機能を持たないので、そうなりますね。LDAPRoleProvider のような Active Directory へ問い合わせを行えるロールプロバイダをロールマネージャに登録することで、任意のメンバシップで管理されたメンバーで Windows セキュリティグループの確認はできそうです。(社内用システムなら LDAP のクエリを固定でもてば結構簡単かもしれませんね)
-
> StarterSite.mdfによるログイン管理は考えておりません。
こちらは、ちゃんと無効になっていますか? ASP.NET MVC ではメンバシップや認証関連が従来通りですが、website では簡易プロバイダが準備されているので、明示的に無効化しないとダメかもしれません。(実際に使ったことないのでなんですが)
以下の点を、再確認してみてください。
- ホスト (IIS) 側で、Windows 認証が有効になっているか
web.config の <system.webServer> にて <windowsAuthentication enabled="true" /> - ホスト (IIS) 側または、ASP.NET 側で匿名アクセスが無効になっているか
ホスト側で無効にするなら web.config の <system.webServer> にて <anonymousAuthentication enabled="false />
ASP.NET 側で無効にするなら web.config の <authorization> にて <deny user="?" /> - ASP.NET 側の認証モードが Windows になっているか
web.config の <authentication> にて mode="Windows" - ASP.NET 側で自動フォーム認証が無効になっているか
web.config の <appSettings> にて <add key="autoFormsAuthentication" value="false" /> - ASP.NET 側で簡易メンバシッププロバイダが無効になっているか
web.config の <appSettings> にて <add key="enableSimpleMembersip" value="false" />
※ system.webServer の設定は、IIS7 や Express 用ですので、あくまで補足です
WindowsTokenProvider によるアクセス制限を行うためには、SimpleRoleProvider も無効化する必要があるかもしれません。
- 回答としてマーク SayBad 2011年3月22日 6:20
- ホスト (IIS) 側で、Windows 認証が有効になっているか
-
Takaokaさん、ありがとうございます。
ご尽力いただき、解決できました。
簡易メンバシップの無効で期待する動きになりました。<add key="enableSimpleMembership" value="false"/>を
追加するだけでリダイレクトもされませんでした。ありがとうございました。
Takaokaさんに愚痴を言ってもしょうがないのですが。。。。
ネット上で、enableSimpleMembershipは「MVC2をMVC3にするときに追加しなさい」という情報しかなく、MVC2を通り越して
来た者には理解できませんでした。どちらかと言えば、「@Razorを利用し、簡易メンバシップ機能を利用しないとき」はWebconfigに
追加しなさいと表現してあるとありがたいです(たぶん何処かにちゃんとした記述があるのだと思いますが)。ここから蛇足。
はじめ、直前に返信いただいた情報を元に、いろいろ試して、期待結果が出なくて途方にくれました。enableSimpleMembersip をコピペ
で使用していたことが敗因でした。「もう少し考えろ!」という鞭として受け止めます。
本当にありがとうございました。