3

我正在努力在我的 ServiceStack 实现中实现 Twitter 身份验证。我正在使用此处找到的 Social Bootstrap API以供参考。

在我的 apphost 中,我有以下代码:

var appSettings = new AppSettings();
Plugins.Add(new SessionFeature());
Plugins.Add(new AuthFeature(
    () => new AuthUserSession(), 
    new IAuthProvider[] 
    { 
        new TwitterAuthProvider(appSettings)
    }));

在 my 中指定了以下选项web.configoauth.twitter.ConsumerKey, oauth.twitter.ConsumerSecret,oauth.twitter.RedirectUrloauth.twitter.CallbackUrl.

我在单元测试中使用以下代码来测试 Twitter 身份验证:

var authenticate = restClient.Post<AuthService>(
    "/auth/twitter?format=json",
    new Auth()
    {
        UserName = "username",
        Password = "password",
        RememberMe = true
     });

/auth/credentials适用于我设置的基于 SQL 的身份验证(我删除了AuthProvider为上面的示例注册我的自定义的行)。我收到/auth/twitter端点的“未找到”错误。

有什么我想念的吗?我的理解是身份验证端点在/auth/[provider].

我在 Visual Studio 2012 中将 Service Stack 版本 3.9.35.0 与 ASP.NET Web 表单项目一起使用。

4

1 回答 1

3

不确定它是否相关,但ServiceStack 的 SocialBootstrap API是一个 ASP.NET MVC 应用程序,ServiceStack托管在 /api。因此,如果您收到404,请尝试在您的路线前加上/api/.

ServiceStack 中的 Twitter、Facebook Auth 和所有其他Open Id 提供程序需要 html 重定向和手动接受,因此无法像普通的 C# 集成测试那样进行测试。

基本上,您需要使用像Selenium这样的东西,它允许您进行完整的端到端集成测试,可以模拟使用浏览器的用户。

其他注意事项:

使用C# ServiceClient时,您永远不想添加前缀?format=json ,因为格式已经在每个请求的HTTP Accept标头中发送。此外,您通常不需要指定自定义路由,因为如果不存在自定义路由,服务将自动回退到使用 ServiceStack 的预定义路由。

因此,如果您可以使用 C# 客户端测试 twitter 身份验证,您可以更改:

var restClient = new JsonServiceClient(...);
var authenticate = restClient.Post<AuthService>(
"/auth/twitter?format=json",
new Auth()
{
    UserName = "username",
    Password = "password",
    RememberMe = true
 });

到这个更简洁的版本:

var restClient = new JsonServiceClient(...);
var authenticate = restClient.Post(new Auth {
    provider = "twitter",
    UserName = "username",
    Password = "password",
    RememberMe = true
});
于 2013-02-10T19:13:06.067 回答