none
@RAZORでのWindowsアカウント取得 RRS feed

  • 質問

  • お世話になっております。

    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アカウントを取得したいのです。

    よろしくお願いいたします。

     

    2011年3月16日 5:33

回答

  • > 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
    2011年3月20日 2:42

すべての返信

  • webpages(razor) で作成したサイトで、1度もログインしていないのでは?

    IsAuthenticated は true になっていますか?

     

    2011年3月17日 3:56
  • Takaokaさん、ありがとうございます。

    イントラネット専用のWebアプリなのでStarterSite.mdfによるログイン管理は考えておりません。
    なので、WebSecurity.IsAuthenticatedは常にFalseです。

    仮にStaterSite.mdfで管理してもUser.IsInRoleにてActive Directoryのセキュリティグループのメンバーか
    どうかの判断はできませんよね。

    WebフォームだけのサイトやMVCのサイトではUser.Identity.Nameは利用者のWindowsアカウントが
    表示されます。@Razor構文の非MVCのときだけUser.Identity.Nameがブランクになります。

     

    2011年3月17日 4:27
  • > 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 のクエリを固定でもてば結構簡単かもしれませんね)

    2011年3月17日 9:55
  • Takaokaさん、ありがとうございます。

    IIS側の設定で匿名認証は使用していません。統合認証を利用しています(IIS6.0です)。

    LDAPクエリは最後の手段にします。

    MVCのときと非MVCのときの @User.Identity.Name の結果が違うのは納得できません。
    web.configに何か記述すれば同様な結果になるのでしょうか?調べてもわからず。

    2011年3月17日 23:07
  • > 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
    2011年3月20日 2:42
  • Takaokaさん、ありがとうございます。

    ご尽力いただき、解決できました。

    簡易メンバシップの無効で期待する動きになりました。<add key="enableSimpleMembership" value="false"/>を
    追加するだけでリダイレクトもされませんでした。

    ありがとうございました。

     

    Takaokaさんに愚痴を言ってもしょうがないのですが。。。。
    ネット上で、enableSimpleMembershipは「MVC2をMVC3にするときに追加しなさい」という情報しかなく、MVC2を通り越して
    来た者には理解できませんでした。どちらかと言えば、「@Razorを利用し、簡易メンバシップ機能を利用しないとき」はWebconfigに
    追加しなさいと表現してあるとありがたいです(たぶん何処かにちゃんとした記述があるのだと思いますが)。

    ここから蛇足。
    はじめ、直前に返信いただいた情報を元に、いろいろ試して、期待結果が出なくて途方にくれました。enableSimpleMembersip をコピペ
    で使用していたことが敗因でした。「もう少し考えろ!」という鞭として受け止めます。
    本当にありがとうございました。

    • 回答としてマーク SayBad 2011年3月22日 6:20
    • 回答としてマークされていない SayBad 2011年3月22日 6:20
    2011年3月22日 6:16