我有几个应用程序(移动和桌面),我需要一个简单的Web服务,用于身份验证并将信息发布回客户端。
在尝试弄清楚如何创建会员数据库或甚至找到与the WCF service I am using,进行检查的前一个数据库时遇到问题之后,我偶然发现了服务堆栈。所以我有几个问题。
服务堆栈是否具有开箱即用的数据库和提供程序,以便我可以简单地为客户端添加身份验证,并让它自己创建数据库。所以我不必从头开始创建它。
他们是服务栈服务和数据库的一个例子,所以我可以作为基础使用吗?
整个WCF服务让我感到困惑。基本上我所寻找的是一项服务,我可以使用它来授权移动应用程序和桌面应用程序,也许稍后可以添加一些额外的功能。它需要自己的数据库,因为它不会从现有网站运行,也是我管理它们的一种方式。
使用WCF对于任务来说似乎过于复杂,我还没有找到任何已经使用数据库的示例以及管理它们的方法。理想情况下,我希望设置一个空白网站,以便我可以管理帐户并让WCF服务使用相同的数据库。
这一切都可以通过服务堆栈轻松完成,任何人都可以指出它的一个例子吗?如果您对我当前的方法有任何建议,那将有所帮助。
答案 0 :(得分:12)
我建议阅读Authentication and authorization wiki,它解释了内置ServiceStack的身份验证支持。
它描述了您可以长期保存经过身份验证的UserData的所有潜在后端存储库:
OrmLiteAuthRepository
RedisAuthRepository
InMemoryAuthRepository
MongoDBAuthRepository
RavenUserAuthRepository
NHibernateUserAuthRepository
以及用于对经过身份验证的客户端会话进行快速,短期数据访问的所有不同缓存选项:
MemoryCacheClient
RedisClient
,PooledRedisClientManager
或BasicRedisClientManager
中的MemcachedClientCache
AzureCacheClient
var appSettings = new AppSettings();
默认情况下,如果未指定,则使用 MemoryCacheClient 。
您可以查看部署在ServiceStack.Caching.Azure上的SocialBootstrap API project的源代码,这是一个示例演示,展示了Web应用程序中启用的所有ServiceStack支持的身份验证选项。
我将重新发布http://bootstrapapi.apphb.com中的代码和文档,因为它已经很好地解释了如何配置它。
大多数Auth Providers都使用AppSettings来访问AppHost.ConfigureAuth()中存储的其他信息:
Plugins.Add(new AuthFeature(
() => new CustomUserSession(), //Use your own typed Custom UserSession type
new IAuthProvider[] {
new CredentialsAuthProvider(), //HTML Form post of UserName/Password credentials
new TwitterAuthProvider(appSettings), //Sign-in with Twitter
new FacebookAuthProvider(appSettings), //Sign-in with Facebook
new DigestAuthProvider(appSettings), //Sign-in with Digest Auth
new BasicAuthProvider(), //Sign-in with Basic Auth
new GoogleOpenIdOAuthProvider(appSettings), //Sign-in with Google OpenId
new YahooOpenIdOAuthProvider(appSettings), //Sign-in with Yahoo OpenId
new OpenIdOAuthProvider(appSettings), //Sign-in with Custom OpenId
}));
您使用AuthFeature插件注册要为此Web应用启用的所有身份验证方法:
Plugins.Add(new RegistrationFeature());
ServiceStack允许您指定自己键入的 CustomUserSession ,它将用于将UserAuth数据保存到会话中。
如果要为新用户启用注册服务,以便他们可以使用提供的凭据进行注册和登录:
//container.RegisterAs<CustomRegistrationValidator, IValidator<Registration>>();
您可以选择使用自己的自定义实现覆盖默认注册验证:
var connStr = appSettings.Get("SQLSERVER_CONNECTION_STRING", //AppHarbor or Local connection string
ConfigUtils.GetConnectionString("UserAuth"));
container.Register<IDbConnectionFactory>(
new OrmLiteConnectionFactory(connStr, //ConnectionString in Web.Config
SqlServerOrmLiteDialectProvider.Instance) {
ConnectionFilter = x => new ProfiledDbConnection(x, Profiler.Current)
});
如果您使用的是OrmLite RDBMS后端存储库,则需要注册数据库工厂,在这种情况下,它配置为访问UserAuth SQL Server数据库:
IUserAuthRepository
上面的ConnectionFilter是可选的,但允许您使用ServiceStack的内置Mini Profiler来分析数据库查询。
现在您已经注册了上面的RDBMS连接,您可以将其连接起来,使其成为身份验证功能的//Use OrmLite DB Connection to persist the UserAuth and AuthProvider info
container.Register<IUserAuthRepository>(c =>
new OrmLiteAuthRepository(c.Resolve<IDbConnectionFactory>()));
:
//Drop and re-create all Auth and registration tables
var authRepo = (OrmLiteAuthRepository)container.Resolve<IUserAuthRepository>();
if (appSettings.Get("RecreateAuthTables", false))
authRepo.DropAndReCreateTables();
else
authRepo.CreateMissingTables(); //Create only the missing tables
如果您使用 OrmLiteAuthRepository ,它可以自动创建AuthFeature所需的后端用户身份验证表:
{{1}}