ここで明らかな何かが欠けている可能性があります。私は MVC と Web API の両方に慣れていないので、頭を水の上に保つことに取り組んでいます。
Web API サービスと連携する MVC アプリケーションがあります。認証は、社内で開発されたログイン サービスによって処理されます。作業中、MVC クライアントは現在のユーザーが認証されているかどうかを確認する必要があります。そうでない場合は、ユーザーを認証して現在のユーザーを更新することになっているこのログイン サービスにリダイレクトされます。次に、Web API サービスからこの ID にアクセスできる必要があります。
MVC アプリケーションの現在のプリンシパル (Thread.CurrentPrincipal または HTTPContext.Current.User を介して設定) が Web API サービスで利用可能であるという前提で動作していますが、サービスからアクセスしようとすると、プリンシパルが空です。次のすべてのオプションを使用してサービスからプリンシパルにアクセスしようとしましたが、常に空です:
RequestContext.Principal
User.Identity
HttpContext.Current.User
Thread.CurrentPrincipal
コードの基本的な考え方は
次のとおりです。
MVC Controller:
public ActionResult Index() {
//Just create a test principal here to see if it's available in the service
IPrincipal temp = new GenericPrincipal(new GenericIdentity("myUserName"), new string[]{});
Thread.CurrentPrincipal = temp;
using (var client = new HttpClient()) {
client.BaseAddress = new Uri("myServiceAddress");
HttpResponseMessage response = client.GetAsync("resourceString")).Result;
...Code to deal with result
}
}
Web API Controller:
[HttpGet]
public HttpResponseMessage MyAction() {
if (User.Identity == null || !User.Identity.IsAuthenticated) {
//So sad
} else {
//Do some work
}
}
どのようにアクセスしようとしても、現在のプリンシパルは常に空です。