私のWeb Core APIのこのコードは、認証されたユーザーだと確認していますが、ユーザー名を取得していない代わりに、アプリケーションプールの名前を取得しています。 これを修正するにはどうすればよいですか?Windowsで認証された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}");
私のログファイルには次のものがあります。
testa = System.Security.Principal.WindowsIdentity
testd = True
loggedInUser = IIS APPPOOL\SIR.WEBUI
私はコントローラの[Authorize]タグを使用しており、匿名認証は無効です。
私はPostmanのメソッドを呼び出します。正常に動作します。LoggedInUserは正しいです。しかし、私は自分のコードから呼び出すと、上記の不正なloggedInUserを取得します。 クライアントアプリケーションからWeb APIを呼び出すために使用するコードは次のとおりです。
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では、アプリケーションプールの種類をさまざまなオプションに設定しています。 applicationpoolidentity、networkservice、localservice、localsystemの各アプリケーションをテストし、毎回アプリケーションをテストしました。私は行方不明ですか?
アン、ここで同様の問題への答えを受け入れるhttps://stackoverflow.com/a/12675503/5233410 – Nkosi
を試すことができますしてみてくださいこれが問題であれば、 "Load User Profile"をtrueに設定してみてください。もしそうでなければ、IISで – Shahbaz
@Nkosiが試してみましたが、動作しません。私はWeb Core APIを使用しています。私は偽装が異なって動作すると思います。たぶん私は偽装を使用する必要がありますか?しかし、AJAXを使うときはそうする必要はありません。だからC#をどうして違うのですか? – arame3333