在现有的Silverlight应用程序中,我用ServiceStack代替WCF服务......我已成功设法移植所有服务并测试它们。我有最后一点要看...认证
目前,我使用基于CustomMembershipProvider的Asp.NET身份验证,如果用户可以访问该应用程序,则会使用某些条件进行检查。
在我的每个服务方法中,我都有
public bool DoSomething(int idUser, string prefix)
{
if (!HttpContext.Current.User.Identity.IsAuthenticated) throw new SecurityExeption();
//some computation
return res;
}
它工作得很好...... 现在我想在ServiceStack上实现相同的功能,我已经创建了我的AuthProvider,如下所示
public class myAuthProvider:CredentialsAuthProvider { public override bool TryAuthenticate(IServiceBase authService,string userName,string password) { if(userName ==“test”&& password ==“test”) return true;
return false;
//return base.TryAuthenticate(authService, userName, password);
}
public override void OnAuthenticated(IServiceBase authService, IAuthSession session, IOAuthTokens tokens, Dictionary<string, string> authInfo)
{
authService.SaveSession(session, SessionExpiry);
}
}
在一个示例项目上测试它(我保证在部署之前我会删除测试/测试!)
我已经尝试检查HttpContext.Current.User.Identity.IsAuthenticated在通过SS服务进行身份验证后是否有效但我得到了错误...我做错了什么或者ServiceStack不会构建身份验证asp.net?我是从错误的AuthProvider出发吗?我希望通过web.config将所有asp.net feauter保持为滑动期/会话超时
由于
答案 0 :(得分:1)
可能重复但可能有所不同,因为您使用的是Silverlight Use ASP.NET Membership in ServiceStack
基于文档:
&#34; ServiceStack的身份验证,缓存和会话提供程序是完全新的,干净的,无依赖性的可测试API,不依赖于ASP.NET并且没有ASP.NET的现有成员资格,缓存或会话提供者模型。&#34;
https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization
如果您正在使用服务堆栈JsonServiceClient,则没有任何内容会自动填写您的请求中的任何身份验证信息。此外,一旦您在ServiceStack上运行服务,您就可以选择退出任何MS内置身份验证方案。有关如何使用共享会话并行运行ASP.NET站点以及这是否适用于您的情况,请参阅Mythz答案。
我有一种预感,在您的自定义Auth Provider中,传递给TryAuthenticate的用户名和密码为NULL或为空。