1 authentication asp.net-mvc principal asp.net-web-api
我可能在这里缺少明显的东西。我是MVC和Web API的新手,所以我正在努力保持头脑清醒。
我有一个与Web API服务接口的MVC应用程序。身份验证将由内部开发的登录服务处理。在工作时,MVC客户端应检查当前用户是否已通过身份验证。如果不是,则它将重定向到该登录服务,该登录服务应该对用户进行身份验证并更新当前用户。然后,我需要能够从Web API服务访问此身份。
我在假设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
}
}
Run Code Online (Sandbox Code Playgroud)
无论我如何尝试访问它,当前主体始终为空。
小智 5
我认为您将需要同时设置线程和上下文主体。这是我在做什么:
private static void SetPrincipal(IPrincipal principal)
{
Thread.CurrentPrincipal = principal;
if (HttpContext.Current != null) {
HttpContext.Current.User = principal;
}
}
Run Code Online (Sandbox Code Playgroud)
在本文的另一部分,它说:
如果您的应用程序执行任何自定义身份验证逻辑,则必须在两个位置上设置主体:
| 归档时间: |
|
| 查看次数: |
4491 次 |
| 最近记录: |