Пользователь NSUrlcredential, поля пароля равны нулю, несмотря на результат «Продолжить» оценки доверия (SecTrustEvaluate) - PullRequest
0 голосов
/ 14 февраля 2019

Мы пытаемся установить связь с сервером 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);
    }

}

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...