我有一個OWIN託管其運行作爲Network Service
與由OWIN啓動類的配置方法,下面一行啓用WindowsAuthentication
網頁API。ApiController.User.Identity和System.Security.Principal.WindowsIdentity給不同的用戶信息
HttpListener listener = (HttpListener)appBuilder.Properties["System.Net.HttpListener"];
listener.AuthenticationSchemes = AuthenticationSchemes.IntegratedWindowsAuthentication;
一切正常,只是當我嘗試獲取用戶的細節精細,由
caller = System.Security.Principal.WindowsIdentity.GetCurrent();
返回:AuthenticationType: "Negotiate", Name: "NT AUTHORITY\NETWORK SERVICE"
ApiController.User.Identity
返回:AuthenticationType: "NTLM", Name: "Domain\Username"
我居然實驗值收到了ApiController.User.Identity
給的憑據。我很困惑爲什麼我在兩個方面都得到了不同的結果。誰能幫我這個?
public class CustomFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
var caller = OperationContext.Current; //null
caller = System.Web.HttpContext.Current; //null
caller = actionContext.RequestContext.Principal.Identity as WindowsIdentity; //desired
caller = System.Security.Principal.WindowsIdentity.GetCurrent(); //gives account details under which the project is hosted.
}
}
OWIN啓動類:
public class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
HttpConfiguration config = new HttpConfiguration();
HttpListener listener = (HttpListener)appBuilder.Properties["System.Net.HttpListener"];
listener.AuthenticationSchemes = AuthenticationSchemes.IntegratedWindowsAuthentication;
config.MapHttpAttributeRoutes();
config.MapODataServiceRoute(
routeName: "ODataRoute",
routePrefix: "Data",
model: GetModel()
);
config.EnsureInitialized();
appBuilder.UseWebApi(config);
}
}
用戶帳戶下這在IIS網絡API項目的運行比誰登錄到您的應用程序並調用API的用戶不同。這就是爲什麼你在那裏得到不同的價值。如果您想要了解調用Web API的用戶的詳細信息,那麼您應該使用「ApiController.User.Identity」。 –
謝謝。那麼,如果我想在ActionFilter中獲得這些細節呢? –
在Action中,你應該有權訪問controllerContext,或者你可以簡單地執行Request.User.Identity。 –