我有REST服務要求,其中一些呼叫需要認證,另一些則不需要。絕對沒有使用狀態,因爲呼叫都是相互獨立的。我已經把一些東西放在一起了,這似乎是正常的,但這是不使用會話的正確方法嗎?這是在ServiceStack上進行無狀態身份驗證的正確方法嗎?
這個問題是有關我的WCF問題,這是回答here。
首先我登記的認證方法:
Plugins.Add(new AuthFeature(() => new AuthUserSession(),
new IAuthProvider[] {
new CustomCredentialsAuthProvider(), //HTML Form post of UserName/Password credentials
}
));
我然後屬性相應的呼叫(或服務或DTO)與所述身份驗證屬性:
[Authenticate]
public HelloResponse Post(Hello request)
{
return new HelloResponse { Result = "Hello, " + request.Name + " with POST & Auth"};
}
我從BasicAuthProvider類不繼承認證:
public class CustomCredentialsAuthProvider : BasicAuthProvider
{
public override bool TryAuthenticate(IServiceBase authService, string userName, string password)
{
return userName == "dylan" && password == "abc123";
}
public override void OnAuthenticated(IServiceBase authService, IAuthSession session, IOAuthTokens tokens, Dictionary<string, string> authInfo)
{
session.IsAuthenticated = true;
//Important: You need to save the session!
authService.SaveSession(session, new TimeSpan(0,0,10));
}
}
正如你所看到的,我確實保存了會話,但在10秒後超時。這是我肯定可以做得更好的部分。它似乎很好地工作。
有沒有更好的方式來做我想要完成的事情? 由於這些服務的會話性質,還有什麼方法可以刪除Auth,AssignRoles和UnassignRoles方法嗎?