Thinktecture ResourcAuthorization,没有AuthorizationManager设置

gre*_*orn 3 c# thinktecture

我正在尝试使用来自github 的Thinktecture示例ResourceAuthorization构建一个示例Web应用程序.

现在我在控制器中有一个用authorize属性修饰的动作:

[ResourceAuthorize("Edit", "Resource")]
    public ActionResult Edit()
    {
        return View();
    }
Run Code Online (Sandbox Code Playgroud)

我实现了自己的AuthorizationManager:

 public class AuthorizationManager : ResourceAuthorizationManager
{
    public override Task<bool> CheckAccessAsync(ResourceAuthorizationContext context)
    {
        var resource = context.Resource.First().Value;

        if (resource == "Resources")
        {
            return CheckResourcesAccessAsync(context);
        }
        else
        {
            return Nok();
        }
    }
Run Code Online (Sandbox Code Playgroud)

当我尝试运行我的应用程序时,我不断收到错误:

No AuthorizationManager set.
Run Code Online (Sandbox Code Playgroud)

我想也许我必须在web.config中注册管理器,如下所示:

 <system.identityModel>
<identityConfiguration>
    <claimsAuthenticationManager type="Namespace.xy.AuthorizationManager, Namespace.xy" />
</identityConfiguration>
</system.identityModel>
Run Code Online (Sandbox Code Playgroud)

它不起作用.我究竟做错了什么?

gre*_*orn 5

解决方案是在启动时注册授权管理器:

 app.UseResourceAuthorization(new MyAuthorizationManager());
Run Code Online (Sandbox Code Playgroud)

  • 此外,必须在使用app.UseWebApi(con​​fig)注册Web Api之前注册.否则你会得到同样的错误,如下所述:https://github.com/IdentityModel/Thinktecture.IdentityModel/issues/122#issuecomment-103945807 (5认同)