我有一個使用ServiceStack構建的REST API。我在調用REST API時沒有任何問題使用BasicAuthentication(我正在註冊AuthFeature
和BasicAuthProvider
)。如何使用ServiceStack進行Web瀏覽器請求的基本身份驗證?
現在我正在嘗試構建一些HTML管理頁面。這些也應該被認證。
[授權]屬性重定向到/登錄頁面,所以我創建了下面的DTO和匹配服務來處理登錄:
[DefaultView("Login")]
public class SiteLoginService : EnshareServiceBase
{
public object Get(SiteLoginRequest req)
{
return new SiteLoginRequest();
}
public object Post(SiteLoginRequest req)
{
//I am trying to use the registered IAuthProvider, which is the BasicAuthProvider
var authProvider = ResolveService<IAuthProvider>();
authProvider.Authenticate(this, EnshareSession,
new ServiceStack.ServiceInterface.Auth.Auth()
{
Password = req.Password,
UserName = req.UserName
});
return HttpResult.Redirect(req.Redirect);
}
}
[Route("/login")]
public class SiteLoginRequest : IReturn<SiteLoginRequest>
{
public string Redirect { get; set; }
public string Password { get; set; }
public string UserName { get; set; }
}
然而,BasicAuthProvider總是拋出HttpError:「無效的基本驗證憑據」的時候我在「登錄」視圖頁面上填寫用戶名和密碼,並將它們發佈到SiteLoginService。這可能是因爲Web瀏覽器沒有填寫基本身份驗證標頭,但我不知道如何使用填寫的用戶名和密碼進行身份驗證。
如何根據AuthProvider正確驗證站點用戶是否適用於現有的REST API?
當您註冊** AuthFeature **時,是否包含'new BasicAuthProvider()'? – mythz
最初我包含了從BasicAuthProvider繼承的我的CustomAuthProvider。解決方案還包括CredentialsAuthProvider - 我在下面發佈了我自己的答案。 – Marek