4

Android アプリケーション (Xamerin で作成) で JsonServiceClient を使用しています。servicestack Web サイトにある HelloWorld の例で動作するテスト クライアントがあります。認証なしで問題なく動作し、すぐに値を返します。

現在、非常に基本的な認証から始めて、認証をミックスに取り入れようとしています。サーバー上に次のようなカスタム認証およびセッション クラスがあります。

    public class userSession : AuthUserSession
    {
        public string clientCode { get; set; }
    }

    public class userAuth : CredentialsAuthProvider
    {
        public override bool TryAuthenticate(IServiceBase authService, string userName, string password)
        {
            if (userName == "user" || password == "1234") {
                var session = (userSession)authService.GetSession(false);
                session.clientCode = "peruse"; 
                return true ; 
            } else {
                return false;
            }
        }
    }

そしてそれは以下で構成されています:

        // auth feature and session feature
        Plugins.Add(new AuthFeature(
            () => new userSession(),
            new[] { new userAuth() }
        ) { HtmlRedirect = null } );

クライアント側では、次のように新しい JsonServerClient を呼び出しています。

JsonServiceClient client = new ServiceStack.ServiceClient.Web.JsonServiceClient("http://172.16.0.15/");

そして、Android インターフェイスのボタンのイベント:

            try 
            {
                client.SetCredentials("user", "1234"); 
                HelloResponse response = client.Get<HelloResponse>("/hello/" + toSum.Text);
                txtResult.Text = response.Result ; 
            }
            catch (Exception ex) 
            {
                txtResult.Text = ex.Message; 
            }

サーバーから 404 が返ってきます。Linux から cURL でアクセスしようとすると:

curl -v http://user:1234@172.16.0.15/hello/5

戻り値:

*   Trying 172.16.0.15... connected
* Server auth using Basic with user 'user'
> GET /hello/5 HTTP/1.1
> Authorization: Basic dXNlcjoxMjM0

(その他の冗長なもの...そして...)

 HTTP/1.1 302 Found

ログインページへのリンクのように見えるものとともに:

<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="/login.aspx?ReturnUrl=%2fhello%2f5">here</a></h2>
</body><html>

私は Web.config に入り、このログイン ページへの参照を削除しましたが、それでもそこに送られようとしています。

私の質問は次のとおりです。資格情報を正しい方法で送信していますか? もしそうなら、提供されたコードは合理的な方法でそれらを処理しているように見えますか?

ありがとう

4

1 に答える 1