我建议阅读身份验证和授权wiki页面,该页面解释了内置在ServiceStack中的身份验证支持。
后端存储库选项
它描述了您可以将经过身份验证的用户数据长期保存到的所有潜在后端存储库:
短期会话/缓存提供程序
以及用于快速、短期访问认证客户端会话数据的各种不同缓存选项:
如果未指定缓存提供程序,则默认使用MemoryCacheClient。
示例项目
您可以查看已部署在http://bootstrapapi.apphb.com上的SocialBootstrap API项目的源代码,该示例演示了在Web应用程序中启用所有ServiceStack支持的身份验证选项。
我将重新发布AppHost.ConfigureAuth()的代码和文档,因为它已经很好地解释了如何配置它。
大多数身份验证提供程序都使用AppSettings访问存储在Web.Config中的其他信息。
var appSettings = new AppSettings()
您可以使用AuthFeature插件来注册您想为此Web应用启用的所有身份验证方法。
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
}));
ServiceStack允许您指定自己的类型为CustomUserSession,这就是它用来将UserAuth数据持久化到会话中的方式。
如果您想为新用户启用注册服务,以便他们可以使用提供的凭据进行注册和登录:
Plugins.Add(new RegistrationFeature())
您可以选择使用自己的自定义实现来覆盖默认的注册验证:
//container.RegisterAs<CustomRegistrationValidator, IValidator<Registration>>();
如果您正在使用OrmLite RDBMS后端存储库,您需要注册一个数据库工厂,在这种情况下,它被配置为访问UserAuth SQL Server数据库:
var connStr = appSettings.Get("SQLSERVER_CONNECTION_STRING",
ConfigUtils.GetConnectionString("UserAuth"));
container.Register<IDbConnectionFactory>(
new OrmLiteConnectionFactory(connStr,
SqlServerOrmLiteDialectProvider.Instance) {
ConnectionFilter = x => new ProfiledDbConnection(x, Profiler.Current)
});
以上的ConnectionFilter是可选的,但它可以让您使用ServiceStack内置的Mini Profiler对DB查询进行分析。
现在,您已经注册了RDBMS连接,可以将其连接起来,使其成为身份验证功能的:
//Use OrmLite DB Connection to persist the UserAuth and AuthProvider info
container.Register<IUserAuthRepository>(c =>
new OrmLiteAuthRepository(c.Resolve<IDbConnectionFactory>()))
如果您使用< strong>OrmLiteAuthRepository strong>, 它可以自动创建AuthFeature所需的后端用户认证表:
//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