Ten kod w moim interfejsie API sieci Web potwierdza, że jestem uwierzytelnionym użytkownikiem, ale nie otrzymuję nazwy użytkownika, zamiast tego otrzymuję nazwę puli aplikacji. Jak to naprawić?Dlaczego nie otrzymuję mojej nazwy użytkownika w uwierzytelnianym przez okno interfejsie Web Core API?
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}");
W moim pliku dziennika otrzymuję;
testa = System.Security.Principal.WindowsIdentity
testd = True
loggedInUser = IIS APPPOOL\SIR.WEBUI
Używam znacznika [Autoryzuj] dla kontrolera i anonimowe uwierzytelnianie jest wyłączone.
Cóż, nazywam tę metodę z Listonosza, działa poprawnie, LoggedInUser jest poprawny. Ale kiedy zadzwonię z mojego kodu, otrzymam nieprawidłowy loggedInUser pokazany powyżej. Kod, którego używam do wywoływania aplikacji webowej z mojej aplikacji klienckiej;
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);
}
}
W IIS ustawiłem typ puli aplikacji na wszystkie różne opcje; applicationpoolidentity, networkservice, localservice, system lokalny i testował aplikację za każdym razem. Czego właściwie mi brakuje?
accept odpowiedź na podobnym problemie tutaj https://stackoverflow.com/a/12675503/5233410 – Nkosi
nie jestem pewien jeśli to jest problem, ale proponuję, aby ustawić "Załaduj profil użytkownika" na true, jeśli jeszcze nie, w IIS – Shahbaz
@Nkosi, próbowałem, ale to nie działa. Używam interfejsu Web Core API i myślę, że podszywanie się działa inaczej. Może powinienem używać personifikacji? Ale nie muszę tego robić, gdy używam AJAX, dlaczego więc C# powinien być inny? – arame3333