2017-08-04 163 views
1

結束我想用asp.net核心實現自定義身份驗證/授權流程,但未能這樣做。認證似乎工作確定:如果我一步調試一步,我可以看到一個AuthenticationTicket從包含有isAuthenticated到真正的身份ClaimsPrincipal創建:Asp.Net核心自定義授權總是以401未授權

public class MyAuthHandler : AuthenticationHandler<MyAuthOptions> 
{ 
    protected override Task<AuthenticateResult> HandleAuthenticateAsync() 
    { 
     // grab stuff from the HttpContext 
     string authHeader = Request.Headers["Authorization"]; 
     // do some stuff that are successfull in my tests 
     var cp = DoTokenBasedAuthentication(authHeader); 

     var ticket = new AuthenticationTicket(cp, 
      new AuthenticationProperties(), Options.AuthenticationScheme); 
     return Task.FromResult(AuthenticateResult.Success(ticket)); 
    } 
} 

不過,我嘗試後添加一個虛擬AuthorizationHandler即:

public class MyRequirement : IAuthorizationRequirement 
{ 
    public MyRequirement() 
    { 
    } 
} 

public class MyAuthRequirement : AuthorizationHandler<MyRequirement> 
{ 
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MyRequirement requirement) 
    { 
     context.Succeed(requirement); 
     return Task.CompletedTask; 
    } 
} 

而與此代碼在我的啓動文件:

services.AddAuthorization(options => 
{ 
    options.AddPolicy("My", 
     policy => policy.Requirements.Add(new MyRequirement())); 
}); 

但每當我加上「[授權(」我「)」在控制器上,那麼所有調用總是返回401.而我的AuthorizationHandler從來沒有達到。 此問題與Asp.Net Core policy based authorization ends with 401 Unauthorized類似,但與我的情況稍有不同,因爲我的用戶已通過身份驗證。我正在努力調試到asp.net MVC源代碼,所以我不知道發生了什麼。

回答

2

您授權處理沒有出現在被插入 你可以試試下面的行添加到您的Startup.ConfigureServices方法:

services.AddSingleton<IAuthorizationHandler, MyAuthRequirement>(); 
+0

哇...我很驚訝,我永遠也不會想到,是一個問題,因爲沒有什麼是抱怨。非常感謝 ! – CanardMoussant