Я могу заставить работать Android-клиент MAUI только в том случае, если использую ClientCredentialType = None, который не принимает учетные данные. Windows и MAUI iOS работают с ClientCredentialType = Basic. Мне нужно передать учетные данные, поскольку клиентские приложения ведут себя по-разному в зависимости от членства в группе аутентифицированного пользователя.
При отладке с платформы .NET MAUI Android получено следующее сообщение:
System.ServiceModel.Security.MessageSecurityException: «HTTP-запрос неавторизован при использовании схемы аутентификации клиента «Базовая». Заголовок аутентификации, полученный от сервера, имел вид «Basic Realm=""'».
Консоль Windows и платформа .NET MAUI iOS работают нормально.
Во время разработки и тестирования у меня есть клиент Android, использующий ClientCredentialType = None, поскольку это единственный режим, в котором я могу заставить приложение работать, но я приближаюсь к развертыванию, и мне нужны учетные данные, чтобы я мог настроить различные поведения, управляемые группой. которые работают на всех платформах.
В серверном приложении WCF я сейчас использую определение конечной точки, приведенное ниже, которое использует ClientCredentialType = None и работает на всех трех клиентских платформах, но не принимает учетные данные:
р>
Код: Выделить всё
Dim binding As New BasicHttpBinding
binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None
selfHost.AddServiceEndpoint(GetType(IWCF), binding, "WCFService")
Код: Выделить всё
Dim binding As New BasicHttpBinding
binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic
selfHost.AddServiceEndpoint(GetType(IWCF), binding, "WCFService")
Код: Выделить всё
private static System.ServiceModel.Channels.Binding GetBindingForEndpoint(EndpointConfiguration endpointConfiguration)
{
System.ServiceModel.BasicHttpBinding result = new System.ServiceModel.BasicHttpBinding();
result.MaxBufferSize = int.MaxValue;
result.ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max;
result.MaxReceivedMessageSize = int.MaxValue;
result.AllowCookies = true;
result.Security.Mode = System.ServiceModel.BasicHttpSecurityMode.TransportCredentialOnly;
result.Security.Transport.ClientCredentialType = System.ServiceModel.HttpClientCredentialType.Basic;
return result;
}
Код: Выделить всё
client.ClientCredentials.UserName.UserName = "[username]"
client.ClientCredentials.UserName.Password = "[Password]"
Если Android .NET MAUI требует совершенно другую аутентификацию, чем BasicHttpBinding, для передачи учетных данных, меня это устраивает, но я не могу найти никаких указаний о том, как это сделать.
Подробнее здесь: https://stackoverflow.com/questions/791 ... roid-not-w
Мобильная версия