1

我正在使用Thinktecture.IdentityModel並試圖使用Owin.BasicAuthentication lib與Webapi和OWIN的UseBasicAuthentication。我的控制器中的身份沒有聲明和顯示未經過身份驗證。使用Thinkbasic.IdentityModel使用UseBasicAuthentication與Webapi和OWIN在我的控制器中的身份沒有索賠

我設置了owin配置與這Startup.Auth.cs

 app.SetDefaultSignInAsAuthenticationType("Basic"); 

     //app.Use(typeof (BasicAuthentication), new[] {_container.Resolve<UserAccountService>()}); 
     app.UseBasicAuthentication(new BasicAuthenticationOptions("realm", ValidationFunction) 
     { 
      AuthenticationType = "Basic", 
      AuthenticationMode = AuthenticationMode.Active 
     }); 

     var oauthServerConfig = new OAuthAuthorizationServerOptions 
     { 
      AllowInsecureHttp = true, 
      Provider = new MembershipRebootProvider(_container.Resolve<UserAccountService>()), 
      TokenEndpointPath = new PathString("/token") 
     }; 
     app.UseOAuthAuthorizationServer(oauthServerConfig); 

     var oauthConfig = new OAuthBearerAuthenticationOptions 
     { 
      AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active, 
      AuthenticationType = "Bearer" 
     }; 
     app.UseOAuthBearerAuthentication(oauthConfig); 

    private static Task<IEnumerable<Claim>> ValidationFunction(string userName, string password) 
    { 
     IEnumerable<Claim> claims = null; 
     UserAccount user; 
     string tenant = ""; 

     if (userName.Contains("\\")) 
     { 
      var parts = userName.Split('\\'); 
      tenant = parts[0]; 
      userName = parts[1]; 
     } 
     else 
     { 
      throw new Exception("Cannot determine tenant and username."); 
     } 

     var userAccountService = _container.Resolve<UserAccountService>(); 
     if (userAccountService.Authenticate(tenant, userName, password, out user)) 
     { 
      claims = user.GetAllClaims(); 
     } 

     return Task.FromResult(claims); 
    } 

索賠由會員重啓預期返回。

但是,當我看到它在我的控制方法有沒有要求和它說,未通過身份驗證..

var identity = (ClaimsPrincipal)Thread.CurrentPrincipal; 

我失去了什麼?

回答

1

我確實在配置中抑制了SuppressDefaultHostAuthentication,但是當檢查這個時,我注意到我沒有「Basic」過濾器,只有Oauth BearerToken。我補充說,現在它工作!

 config.SuppressDefaultHostAuthentication(); 
     config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); 
     config.Filters.Add(new HostAuthenticationFilter("Basic")); 
相關問題