2017-12-13 16 views
0

私はそれについて見つけられるすべてのブログを試しました。しかし、私はNTLMの挑戦で状態401を解決することができません。Xamarin.iOSでNTLM認証で401を取得する

私は基本的に会社のサーバーでホストされているユーザーのプロフィール画像を取得する必要があります。

ブラウザでURLにヒットしたら、ユーザー名とパスワードの入力を求められたら、イメージを取得します。

しかし、私は以下Xamarin.iOS

に達成することはできませんよ同じことは私がしようとしているコードスニペットです。あなたはNSURLConnectionと同じリクエストを投げるとき、私は取得しています

  var credentials = new NetworkCredential("myUserName", "Password", "domain"); 

     var handler = new HttpClientHandler { Credentials = credentials, UseDefaultCredentials = false }; 
     handler.AllowAutoRedirect = false; 
     var client = new HttpClient(handler); 
     try 
     { 
      var response = await client.GetAsync("https://mycustomUrl.net/User%20Photos/Profile%20Pictures/eurn_martin_kremmer_MThumb.jpg"); 
      Console.WriteLine(response); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex); 
     } 

レスポンスが

StatusCode: 401, ReasonPhrase: 'Unauthorized', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: 
{ 
Server: Microsoft-IIS/8.0 
SPRequestGuid: 5725369e-b047-40c5-d468-0417992ffab3 
request-id: 5725369e-b047-40c5-d468-0417992ffab3 
X-FRAME-OPTIONS: SAMEORIGIN 
SPRequestDuration: 2 
SPIisLatency: 0 
WWW-Authenticate: NTLM 
X-Powered-By: ASP.NET 
MicrosoftSharePointTeamServices: 15.0.0.4779 
X-Content-Type-Options: nosniff 
X-MS-InvokeApp: 1; RequireReadOnly 
Date: Wed, 13 Dec 2017 13:55:26 GMT 
Content-Length: 0 
} 
+0

httpコールでは例外がありますが、httpsにも例外が必要ですか? –

+0

oはい、それは私のせいです。 –

答えて

0

うわーですが、私は、解決策はパイと同じくらい簡単です知りませんでした。ここ

responseData = new NSMutableData(); 
request = new NSMutableUrlRequest(uri,NSUrlRequestCachePolicy.UseProtocolCachePolicy, 6000); 
request.HttpMethod = "GET"; 
connection = new NSUrlConnection(request, this); 

これは、Citrix MAM環境での手間をかけずに動作します。

しかし、シミュレータでテストするには、以下のようなチャレンジを処理する必要があります。

 public override void WillSendRequestForAuthenticationChallenge(NSUrlConnection connection, NSUrlAuthenticationChallenge challenge) 
    { 
     Console.WriteLine(challenge.ProtectionSpace); 

     if (challenge.PreviousFailureCount == 0) 
     { 

      NSUrlCredential cred = new NSUrlCredential(this.myUserName, this.myPass, NSUrlCredentialPersistence.None); 
      challenge.Sender.UseCredential(cred, challenge); 
     } 

    }