Использование Thinktecture.IdentityModel lib с использованием UseBasicAuthentication с Webapi и OWIN Identity в моих контроллерах не имеет претензий

Я использую Thinktecture.IdentityModel и пытаюсь использовать библиотеку Owin.BasicAuthentication с 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;

Что мне не хватает?


person retslig    schedule 01.04.2015    source источник


Ответы (1)


У меня было подавление SuppressDefaultHostAuthentication в конфигурации, но при проверке я заметил, что у меня нет фильтра для «Basic», только Oauth BearerToken. Я добавил это, и теперь это работает!

        config.SuppressDefaultHostAuthentication();
        config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
        config.Filters.Add(new HostAuthenticationFilter("Basic"));
person retslig    schedule 11.06.2015