AndroidClientHandler和内置的基本身份验证

时间:2017-02-09 08:48:13

标签: xamarin xamarin.android xamarin.forms basic-authentication

我正在尝试使用Xamarin AndroidClientHandler进行内置的基本身份验证,但没有成功。代码如下所示:

https://github.com/tieto-sternell/DemoAndroidBasicAuth/blob/c6bb4d547f2456e66b25daca4951957250278ac3/DemoAndroidBasicAuth/DemoAndroidBasicAuth.Droid/TestStuff.cs#L39-L43

        ICredentials credentials = new NetworkCredential(dummyUsername, dummyPassword);
        var handler = new AndroidClientHandler();
        handler.Credentials = credentials;

和: https://github.com/tieto-sternell/DemoAndroidBasicAuth/blob/c6bb4d547f2456e66b25daca4951957250278ac3/DemoAndroidBasicAuth/DemoAndroidBasicAuth.Droid/TestStuff.cs#L19-L21

        var client = new HttpClient(handler);
        var badResponse = await client.GetAsync(basicUri) as AndroidHttpResponseMessage;

正如您所看到的,它非常简单,代码与其工作的.Net等效代码非常相似。但是响应是401,所以我做错了。

编辑:正如@jgoldberger在下面指出的那样,可以手动创建标题。这可以通过在消息中添加标题来完成(github.com/tieto-sternell/DemoAndroidBasicAuth/blob/e7118f88a5b45f91207e90e9ea64c554d0ea9cd6/DemoAndroidBasicAuth/DemoAndroidBasicAuth.Droid/TestStuff.cs#L43-L48)

        byte[] byteToken = System.Text.Encoding.UTF8.GetBytes(dummyUsername + ":" + dummyPassword);
        var tokenValue = Convert.ToBase64String(byteToken);
        var token = "Basic " + tokenValue;

        HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, new Uri(basicUri));
        requestMessage.Headers.Add("Authorization", token.ToString());

或者通过向HttpClient添加标题(github.com/tieto-sternell/DemoAndroidBasicAuth/blob/e7118f88a5b45f91207e90e9ea64c554d0ea9cd6/DemoAndroidBasicAuth/DemoAndroidBasicAuth.Droid/TestStuff.cs#L33-L37)

        byte[] byteToken = System.Text.Encoding.UTF8.GetBytes(dummyUsername + ":" + dummyPassword);
        var tokenValue = Convert.ToBase64String(byteToken);

        var client = new HttpClient();
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", tokenValue);
但是,我不认为这是应该如何工作的。我的意思是,这是什么时候(github.com/xamarin/xamarin-android/blob/0c3597869bc4493895e755bda8a26f778e4fe9e0/src/Mono.Android/Xamarin.Android.Net/AuthModuleBasic.cs#L50-L52)

        response += cred.UserName + ":" + cred.Password;

        return new Authorization ($"{AuthenticationType} {Convert.ToBase64String (Encoding.ASCII.GetBytes (response))}");

代码应该在那种情况下运行?

我认为好像没有使用身份验证模块。

这里的背景故事是,我需要知道如何将Basic工作作为涉及摘要式身份验证和自定义“AuthenticationScheme.Unsupported”的更大问题的一部分,但是我们稍后会在我们获得更简单的基本身份验证方案启动并运行。

最好的问候,
基督教

0 个答案:

没有答案