2014-10-22 3 views
1

Я пытаюсь выполнить проверку подлинности учетных данных Servicestack, но когда я пытаюсь использовать защищенную службу, украшенную [Authenticate], я получаю несанкционированное исключение даже после успешной аутентификации. Что здесь упущено?Неавторизованное исключение Servicestack после авторизации учетных данных

AppHost выглядит следующим образом:

AuthFeature authFeature = new AuthFeature(() => new AuthUserSession(), 
      new IAuthProvider[]{      
       new BpeCredentialsAuthProvider(), //HTML Form post of UserName/Password credentials           
      }) { HtmlRedirect = null }; 
     authFeature.ServiceRoutes[typeof(AuthService)] = new[] { "/auth" }; 
     authFeature.IncludeAssignRoleServices = false; 
     Plugins.Add(authFeature); 
container.Register<ICacheClient>(new MemoryCacheClient()); 

Я думаю, что я правильно перекрывая TryAuthenticate и от Swagger все работает правильно. Проблема заключается в вызове клиента - после аутентификации против myurl/auth/successs - следующий вызов другой службы завершается с несанкционированным исключением. Любая идея, пожалуйста?

После дополнительных исследований: похоже, что ss-id/ss-pid cookie необходимо передать ограниченному ресурсу для аутентификации. Как я могу это сделать?

ответ

0

При аутентификации через Ajax файлы cookie автоматически отправляются на последующие запросы.

Аналогично с C#/.NET Service Clients куки будут сохранены на клиенте идентифицированные службы при указании RememberMe=true при аутентификации запроса, например:

var client = new JsonServiceClient(baseUrl); 

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

Вы можете повторно использовать тот же экземпляр для создания аутентифицированных запросов:

var response = client.Post(new Secure { ... }); 

Вы также можете перенести печенье на новый клиент по assinging в CookieContainer например:

newClient.CookieContainer = client.CookieContainer; 
+0

Спасибо за помощь. –

0

Я обнаружил, что к последующим запросам необходимо передать не только cookie sessionId, но и весь контейнер -ss-id, ss-pid, ss-opt, X-UAId-. Я не мог ни получить доступ к контейнеру cookie из ICacheClient, мне пришлось вручную установить куки-файлы, когда есть аутентификация, и запросить все куки-файлы для этого контейнера и добавить их к новому вызову службы.

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