2011-10-18 9 views
12

Windowsの認証が必要な内部Webアプリケーションのページをレンダリングするコントローラが1つあります。システムにWindows認証される必要がないJSONベースのクエリに使用される第2コントローラが存在しますか?それは可能ですか?私は現時点でどちらか一方しか行うことができなかったようだ。MVC3:1つのコントローラはWindows認証を要求し、2つ目は匿名を許可できますか?

提案がありますか?

+1

、どのように正確にしたのですか? – bzlm

+0

どのように正確にWindows認証を有効にしましたか? – gideon

+0

IIS設定でWindows認証が有効になっており、匿名も許可されています。 Web.configにはがあります。私は保護する必要のあるコントローラーに[Authorize]属性を追加し、公開したいコントローラーから離しました。 – Shawn

答えて

6

はいにアクセスする簡単なアカウントコントローラに例えばのでAuthorizeAttribute

でこれを処理することができます。例えば記事」、表のホームコントローラから http://www.asp.net/mvc/tutorials/authenticating-users-with-windows-authentication-cs

:あなたは何を選ぶか、認証に基づいて、あなたが探しているものAuthorize

この記事は正確に提示して、コントローラのアクションメソッドを飾ります1では、Index()、CompanySecrets()、およびStephenSecrets()という3つのアクションが公開されていますが、誰でもIndex()アクションを呼び出すことができますが、WindowsローカルのManagersグループのメンバーのみがCompanySecrets Stephenという名前のドメインユーザー(Redmondドメイン内)はStephenSecrets()アクションを呼び出すことができます。

0

はい、あなたは、許可されたユーザーのみがアクションChangePassword

[Authorize] 
    public ActionResult ChangePassword() 
    { 
     // your code here 
    } 
8

私たちには、この正確なことをする必要のあるアプリがいくつかあります。多くの場合、Googleのアプリケーションはweb.configに閉じ込められています。

<authentication mode="Windows"/> 
<authorization> 
    <allow roles="DOMAIN\GroupNameHere"/> 
    <deny users="?"/> 
</authorization> 
<location path="ApiControllerName"> 
    <system.web> 
    <authorization> 
     <allow users="*"/> 
    </authorization> 
    </system.web> 
</location> 

ただし、引き続きそのAPIコントローラのWindows認証をオフにする必要があります。

<location path="Default Web Site/ApplicationName/ApiControllerName"> 
    <system.webServer> 
     <security> 
      <authentication> 
       <anonymousAuthentication enabled="true" /> 
       <windowsAuthentication enabled="false" /> 
      </authentication> 
     </security> 
    </system.webServer> 
</location> 

このPowerShellスクリプトは、あなたのためにそれを行います:あなたは、IISサーバー上のapplicationHost.configファイルを編集して追加することによってこれを行うことができます「どちらか一方だけを行うことができた」

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Web.Administration") 

$applicationLocationPath = "Default Web Site/ApplicationName/ApiControllerName" 

$oIIS = new-object Microsoft.Web.Administration.ServerManager 
$oGlobalConfig = $oIIS.GetApplicationHostConfiguration() 

$oSection = $oGlobalConfig.GetSection("system.webServer/security/authentication/anonymousAuthentication", $applicationLocationPath) 
$oSection.SetAttributeValue("enabled", "True") 
$oSection = $oGlobalConfig.GetSection("system.webServer/security/authentication/windowsAuthentication", $applicationLocationPath) 
$oSection.SetAttributeValue("enabled", "False") 

$oIIS.CommitChanges() 
+1

あなた、先生、私の命を救った! – 130nk3r5

関連する問題