5

我有几个应用程序(移动和桌面),我需要创建一个简单的 Web 服务来进行身份验证并将信息发布回客户端。

在试图弄清楚如何创建会员数据库甚至找到以前的数据库来检查我正在使用的 WCF 服务的问题之后,我偶然发现了服务堆栈。所以我有几个问题。

服务堆栈是否有现成的数据库和提供程序,以便我可以简单地为客户端添加身份验证,并让它自己创建数据库。所以我不必从头开始创建它。

他们是否已经是 servicestack 服务和数据库的示例,因此我可以将其用作基础?

整个 WCF 服务让我感到困惑。基本上,我正在寻找的只是一种服务,我可以使用它来授权移动应用程序和桌面应用程序,并且可能稍后会为其添加一些额外的功能。它需要自己的数据库,因为它不会从现有网站运行,并且是我管理它们的一种方式。

使用 WCF,这项任务似乎过于复杂,我还没有找到任何已经使用数据库的示例以及管理它们的方法。理想情况下,我希望建立一个空白网站,这样我就可以管理帐户并让 WCF 服务使用相同的数据库。

这一切都可以通过服务堆栈轻松完成吗?有人可以指出一个例子吗?如果您对我目前的方法有任何提示,也会有所帮助。

4

1 回答 1

12

我建议阅读Authentication and authorization wiki,它解释了 ServiceStack 内置的身份验证支持。

后端存储库选项

它描述了您可以将经过身份验证的 UserData 长期保存到的所有潜在后端存储库:

短期会话/缓存提供者

以及用于对经过身份验证的客户端会话进行快速、短期数据访问的所有不同缓存选项:

默认情况下,如果未指定,则使用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 数据持久保存到 Session 中。

如果您想为新用户启用注册服务,以便他们可以使用提供的凭据进行注册和登录:

Plugins.Add(new RegistrationFeature());

您可以选择使用自己的自定义实现覆盖默认注册验证:

//container.RegisterAs<CustomRegistrationValidator, IValidator<Registration>>();

如果您使用的是 OrmLite RDBMS 后端存储库,则需要注册一个 DB Factory,在这种情况下,它被配置为访问 UserAuth SQL Server DB:

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)
        });

上面的 ConnectionFilter 是可选的,但允许您使用 ServiceStack 的内置 Mini Profiler 来分析数据库查询。

现在您已经在上面注册了您的 RDBMS 连接,您可以将它连接起来,使其成为IUserAuthRepository身份验证功能:

//Use OrmLite DB Connection to persist the UserAuth and AuthProvider info
container.Register<IUserAuthRepository>(c =>
    new OrmLiteAuthRepository(c.Resolve<IDbConnectionFactory>())); 

如果使用OrmLiteAuthRepository,它可以自动创建 AuthFeature 所需的后端 User Auth 表:

//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
于 2013-03-20T00:55:03.623 回答