ClaimsAuthorizationManager问题

Ste*_*eve 3 asp.net-mvc authorization wif

我使用自定义ClaimsAuthorizationManager在MVC中进行授权,但我遇到了一个问题.

  • 即使我只是在CheckAccess方法中返回'true',所有文件/图像也会被500运行时错误阻止,因为:

异常信息:异常类型:NotSupportedException异常消息:ID1075:如果没有当前主体(HttpContext.Current.User)作为ClaimsPrincipal,则不能使用ClaimsAuthorizationModule.在System.IdentityModel.Services.ClaimsAuthorizationModule.Authorize()

我没有在应用程序的早期更改有关Current Principal的任何内容......想法?我很难过,并且正在寻找那个没有发现任何错误的错误......


<system.webServer>    
    <modules>      
      ...
      <add name="ClaimsAuthorizationModule" type="System.IdentityModel.Services.ClaimsAuthorizationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    </modules>
</system.webServer>


  <system.identityModel>
    <identityConfiguration>
      <claimsAuthorizationManager type="NamespaceFun.CustomAuthorizationManager, NamespaceFun" >
    <policy resource="http://localhost:52606/" action="GET">
    </policy>
      </claimsAuthorizationManager>
      ...
    </identityConfiguration>
   </system.identityModel>


public class CustomAuthorizationManager : ClaimsAuthorizationManager
{      
    public override bool CheckAccess(AuthorizationContext context)
    {   
        return true;            
    }       
}
Run Code Online (Sandbox Code Playgroud)

Sha*_*han 5

我只是遇到了同样的问题,所以我将我的web.config与WIF书中的一个进行了比较,结果发现我preCondition="managedHandler"在add元素的末尾缺少了,看起来你也错过了它.

它似乎也从MSDN示例中丢失了.

正确的方式:

<add name="ClaimsAuthorizationModule" 
     type="System.IdentityModel.Services.ClaimsAuthorizationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
     preCondition="managedHandler" />
Run Code Online (Sandbox Code Playgroud)