2017-08-09 35 views
6

Web Core API'mdaki bu kod, kimliği doğrulanmış bir kullanıcı olduğumu doğrular, ancak kullanıcı adımı alamıyorum, bunun yerine uygulama havuzunun adını alıyorum. Bunu nasıl düzeltirim?Kullanıcı adımı, Windows kimlik doğrulamalı Web Çekirdeği API'sinde neden alamıyorum?

var testa = User.Identity.GetType(); 
NLogger.Info($"testa = {testa}"); 
var testd = User.Identity.IsAuthenticated; 
NLogger.Info($"testd = {testd}"); 
var loggedInUser = User.Identity.Name; 
NLogger.Info($"loggedInUser = {loggedInUser}"); 

Benim günlük dosyamda;

testa = System.Security.Principal.WindowsIdentity 
testd = True 
loggedInUser = IIS APPPOOL\SIR.WEBUI 

Denetleyici için [Authorize] etiketini kullanıyorum ve anonim kimlik doğrulaması devre dışı.

Postacı yöntemini arıyorum, Tamam çalışıyor, LoggedInUser doğru. Ancak kodumdan aradığımda yukarıda gösterilen yanlış oturum açma kullanıcı yanıtını alıyorum. İstemci uygulamasından web api'yi çağırmak için kullandığım kod;

public static async Task<IEnumerable<ContractDto>> GetAllForUser() 
{ 
    using (var client = new HttpClient(new HttpClientHandler { UseDefaultCredentials = true })) 
    { 
     client.BaseAddress = new Uri(AppSettings.ServerPathApi); 
     var path = GetPath("getallforuser"); 
     var response = await client.GetAsync(path); 
     response.EnsureSuccessStatusCode(); 
     var stringResult = await response.Content.ReadAsStringAsync(); 
     return JsonConvert.DeserializeObject<IEnumerable<ContractDto>>(stringResult); 
    } 
} 

IIS'de uygulama havuzu türünü çeşitli seçeneklerin tümüne ayarladım; applicationpoolidentity, networkservice, localservice, localsystem ve her seferinde uygulamayı test etti. Ne yeryüzünde özlüyorum?

+0

bir buraya https://stackoverflow.com/a/12675503/5233410 – Nkosi

+0

emin değilim benzer bir konuya cevabı kabul deneyebilirsiniz Sorun bu ise, ancak IIS – Shahbaz

+0

@ Nkosi'de "Kullanıcı Profili Yükle" seçeneğini true olarak ayarlamayı denemenizi öneririm, ancak bu işe yaramadı. Web Çekirdeği API'sini kullanıyorum ve kimliğe bürünmenin farklı şekilde çalıştığını düşünüyorum. Belki kimliğe bürünme kullanıyor olmalıyım? Ama sonra AJAX kullanırken bunu yapmaya gerek yok, o zaman neden C# farklı olmalı? – arame3333

cevap

0

deneyin bu

if (System.Web.HttpContext.Current.User.Identity.IsAuthenticated) 
{ 
    string username = System.Web.HttpContext.Current.User.Identity.Name; 
} 

veya

var user = (System.Security.Principal.WindowsIdentity)HttpContext.Current.User.Identity; 
var userName = user.Impersonate(); 
+0

Bazı araştırmalar yaptıktan sonra AJAX'tan gelen bir aramanın kimliğimi tarayıcıdan alacağını öğrendim, ancak IIS üzerinden bunun yerine uygulama havuzunu alacağım. IIS için çözüm, kimliğe bürünme kullanmaktır ve şimdi buna bakıyorum. – arame3333

+0

@ arame3333 kimliğe bürünme eklemek istiyorsanız, ikinci kodu kullanın, ancak bu parçayı ekleyin var userName = user.Impersonate(). Ben bu cevabı kontrol etmek için cevabı düzenledim –

+0

@ arame3333 Burada da benzer bir soru var [İstek ile Kimlik Bilgilerini Alın] (https://stackoverflow.com/questions/12212116/how-to-get-httpclient-to -pass-kimlik bilgileri-istekle birlikte/12675503 # 12675503) –