У меня есть API, написанный в ServiceStack, и я пытаюсь создать аутентификацию для клиентов. На данный момент этот API будет доступен только клиентам Android (Xamarin/C#). Сам API запущен на сервере Debian с Apache/mod_monoсеанс пользователя Servicestack не работает
После прочтения в Github я все еще не уверен на 100%, как собрать это вместе таким образом, чтобы ... как только клиент предоставил действительные учетные данные (Для тестирования базовой HTTP-аутентификации пользователь получает сеанс, а учетные данные снова не проверяются при последующих запросах того же сеанса.
AppHost Класс:
{
public class AppHost
: AppHostBase
{
public AppHost() //Tell ServiceStack the name and where to find your web services
: base("Service Call Service", typeof(ServiceCallsService).Assembly) { }
public override void Configure(Funq.Container container)
{
//Set JSON web services to return idiomatic JSON camelCase properties
ServiceStack.Text.JsConfig.EmitCamelCaseNames = true;
// Session storage
container.Register<ICacheClient>(new MemoryCacheClient());
// auth feature and session feature
Plugins.Add(new AuthFeature(
() => new AuthUserSession(),
new[] { new userAuth() }
) { HtmlRedirect = null });
}
public class userAuth : BasicAuthProvider
{
public override bool TryAuthenticate(IServiceBase authService, string userName, string password)
{
peruseAuth peruseAuthHandler= new peruseAuth();
errorLogging MyErrorHandler = new errorLogging() ;
if (peruseAuthHandler.ValidateUser(authService, userName, password))
{
try
{
var session = (AuthUserSession)authService.GetSession(false);
session.UserAuthId = userName;
session.IsAuthenticated = true;
return true;
}
catch(Exception ex)
{
MyErrorHandler.LogError(ex, this) ;
return false ;
}
}
else
{
Console.Write("False");
return false;
}
}
}
JsonServiceClient:(Просто "Логин" событие)
btnLogin.Click += (sender, e) =>
{
// Set credentials from EditText elements in Main.axml
client.SetCredentials(txtUser.Text, txtPass.Text);
// Force the JsonServiceClient to always use the auth header
client.AlwaysSendBasicAuthHeader = true;
};
Я делал немного лесозаготовок, и Кажется, что каждый раз, когда клиент выполняет действие, их имя пользователя/пароль проверяется на базе данных. Здесь что-то не так, или это ожидаемый результат?