2016-02-15 3 views
1

Я пытаюсь получить доступ к своему пользовательскому AuthProvider (который унаследован от BasicAuthProvider) из ServerEventsClient. Provider код очень прост ATMИспользовать специальную сервисную программу AuthProvider

public class RoomsAuthProvider : BasicAuthProvider 
{ 
    public RoomsAuthProvider(AppSettings appSettings) : base(appSettings) 
    { 
    } 

    public RoomsAuthProvider() 
    { 
    } 

    public override bool TryAuthenticate(IServiceBase authService, 
     string userName, string password) 
    { 
     return true; 
    } 

    public override IHttpResult OnAuthenticated(IServiceBase authService, 
     IAuthSession session, IAuthTokens tokens, 
     Dictionary<string, string> authInfo) 
    { 
     session.FirstName = "some_firstname_from_db"; 
     return base.OnAuthenticated(authService, session, tokens, authInfo); 
    } 
} 

Я зарегистрировав его как обычно:

public override void Configure(Funq.Container container) 
{ 
    container.Register<ICacheClient>(new MemoryCacheClient()); 

    Plugins.Add(new AuthFeature(() => new AuthUserSession(), 
     new IAuthProvider[] 
     { 
      new RoomsAuthProvider() 
     })); 

    Plugins.Add(new ServerEventsFeature()); 
} 

и мой клиент:

var client = new ServerEventsClient("http://localhost:1337/", "home") 

пытается аутентифицировать:

var authResponse = client.Authenticate(new Authenticate 
{ 
    provider = "RoomsAuthProvider", 
    UserName = "[email protected]", 
    Password = "[email protected]", 
    RememberMe = true, 
}); 

I всегда получают ошибку NotFound и rror, заявляющую, что для этого AuthProvider не настроена настройка. Настройка имени и области в провайдере не помогло. Есть ли другой поток аутентификации для этого типа клиента, или я чего-то не хватает? Любые идеи приветствуются

ответ

2

Когда вы унаследовали BasicAuthProvider вы также наследуют это provider name, который, если не переопределить его, является default is "basic" (т.е. это не имя наследуемого класса).

Но BasicAuthProvider реализует HTTP Basic Auth, поэтому вы должны называть его по HTTP базовой аутентификации не через вызов веб-службы.

Если вы пытаетесь выполнить аутентификацию через вызов веб-службы, вы должны наследовать от CredentialsAuthProvider, а это метод аутентификации, используемый для аутентификации через Username/Password, как вы делаете в своем примере. Имя поставщика для CredentialsAuthProvider является credentials так что ваш клиент вызов будет затем:

var authResponse = client.Authenticate(new Authenticate 
{ 
    provider = "credentials", 
    UserName = "[email protected]", 
    Password = "[email protected]", 
    RememberMe = true, 
}); 
+0

Я изменил базовый класс CredentialsAuthProvider, перекрываться именем общественного нового статической строки Name = «RoomsAuth»; но это не сработало – HardLuck

+0

UPD: смена имени поставщика для учетных данных – HardLuck

+0

@HardLuck, потому что статическое свойство Name ничего не делает само по себе, вам нужно вместо этого изменить свойство экземпляра 'Provider', но я ' d оставьте его как есть, так как он все еще представляет собой autw-провайдер учетных данных. – mythz

Смежные вопросы