Мы пытаемся установить связь с сервером OAuth для создания токена OAuth для аутентификации.
Между нами (клиентом) и сервером находится Cloudflare.
Я следовал Техническому примечанию 2232 от Apple.Также см. Документацию Apple.
Мы получаем пустые поля NSUrlCredential (пользователь, пароль), несмотря на результат Proceed SecTrustEvaluate.Поле HasPassword имеет значение false.Скриншот отладки NSUrlCredential присоединен.
В обратном вызове DidReceiveData мы получаем данные с ошибками «invalid_grant», «error_description»: «Недопустимая комбинация имени пользователя и пароля»
Наконец, в DidCompleteWithError мы получаем ответ с httpкод состояния 401. Это происходит также на iOS11 и iOS 12.Что еще нужно сделать с вторым доверенным объектом, чтобы получить от него учетные данные.
Мы работаем над приложением, созданным с помощью Xamarin.iOS.
публичное переопределение void DidReceiveChallenge (сеанс NSUrlSession, вызов NSUrlAuthenticationChallenge, завершение действияHandler) {
if (challenge.ProtectionSpace.AuthenticationMethod.Equals("NSURLAuthenticationMethodServerTrust"))
{
if (challenge.ProtectionSpace.Host.Equals("Our domain")
{
if (challenge.ProtectionSpace.ServerSecTrust == null)
{
completionHandler(NSUrlSessionAuthChallengeDisposition.PerformDefaultHandling, null);
}
else
{
NSData data = challenge.ProtectionSpace.ServerSecTrust.GetExceptions();
bool added = challenge.ProtectionSpace.ServerSecTrust.SetExceptions(data);
NSError error;
bool passed = challenge.ProtectionSpace.ServerSecTrust.Evaluate(out error);
SecTrustResult sResult = challenge.ProtectionSpace.ServerSecTrust.GetTrustResult();
if (sResult == SecTrustResult.Proceed)
{
NSUrlCredential urlcredential = NSUrlCredential.FromTrust(challenge.ProtectionSpace.ServerSecTrust);
completionHandler(NSUrlSessionAuthChallengeDisposition.UseCredential, urlcredential);
}
else
{
completionHandler(NSUrlSessionAuthChallengeDisposition.CancelAuthenticationChallenge, null);
}
}
}
else
{
completionHandler(NSUrlSessionAuthChallengeDisposition.PerformDefaultHandling, null);
}
}