ServiceStack を使用して構築された REST API があります。REST API を呼び出すときに問題なく BasicAuthentication を使用しています ( を に登録しAuthFeature
ていますBasicAuthProvider
)。
現在、いくつかの HTML 管理ページを作成しようとしています。これらも認証する必要があります。
[Authenticate] 属性は /login ページにリダイレクトされるため、ログインを処理するために次の 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; }
}
ただし、ログイン ビュー ページにユーザー名とパスワードを入力し、これらを SiteLoginService に POST すると、BasicAuthProvider は常に HttpError: "Invalid BasicAuth credentials" をスローします。おそらく、Web ブラウザーが Basic 認証ヘッダーに入力していないためですが、ユーザー名とパスワードを入力して認証する方法がわかりません。
既存の REST API で動作する AuthProvider に対してサイト ユーザーを適切に認証するにはどうすればよいですか?