3

Twitter 認証を ServiceStack 実装に実装する作業を行っています。参照用にここにある Social Bootstrap API を使用しています。

私のアプリホストには、次のコードがあります。

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

次のオプションは my で指定されますweb.configoauth.twitter.ConsumerKeyoauth.twitter.ConsumerSecretoauth.twitter.RedirectUrl、およびoauth.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 の ASP.NET Web フォーム プロジェクトで Service Stack バージョン 3.9.35.0 を使用しています。

4

1 に答える 1

3

関連するかどうかはわかりませんが、ServiceStack の SocialBootstrap APIは、ServiceStackが /api でホストされている ASP.NET MVC アプリケーションです。したがって、 404を取得している場合は、ルートの前に を付けてみてください/api/

Twitter、Facebook Auth、およびServiceStack の他のすべての Open Id プロバイダーは、 html リダイレクトと手動承認を必要とするため、通常の C# 統合テストのようにテストすることはできません。

基本的に、ブラウザーを使用してユーザーをシミュレートできる完全なエンドツーエンドの統合テストを実行できるSeleniumのようなものを使用する必要があります。

その他の注意事項:

C# ServiceClientを使用する場合、フォーマットはすべての要求でHTTP Acceptヘッダーで既に送信されているため、プレフィックスとして?format=jsonを使用することは決してありません。また、カスタム ルートが存在しない場合、サービスは 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 に答える