ASP.NET WebApi User.Identity返回null

时间:2018-12-03 15:29:01

标签: c# asp.net asp.net-web-api2 owin

因此,我一直在尝试在ASP.NET WebApi 2应用程序中实现使用Facebook登录的功能。

但是由于某些原因,当我尝试验证匿名请求时:

android:animateLayoutChanges="false"

if (!User.Identity.IsAuthenticated) { return new ChallengeResult(provider, this); } 为空。

我已经在User上将身份验证模式设置为None

Web.config:

web.config

此外,这也是我在Startup.cs类中为OAuth配置管道的方式:

<system.web>
   <authentication mode="None" />
   <compilation debug="true" targetFramework="4.6.1" />
   <httpRuntime targetFramework="4.6.1" />
   <customErrors mode="Off" />
</system.web>

这就是我得到控制器的方式:

public void ConfigureOAuth(IAppBuilder app) {
    app.UseExternalSignInCookie(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ExternalCookie);
    OAuthBearerOptions = new OAuthBearerAuthenticationOptions();

    facebookAuthOptions = new FacebookAuthenticationOptions() {
         AppId = "xxxxx",
         AppSecret = "xxxxxxxxxxx",
         Provider = new FacebookAuthProvider()
    };
    app.UseFacebookAuthentication(facebookAuthOptions);
}

这是我设置开发服务器的方式: enter image description here

据我所知,[OverrideAuthentication] [HostAuthentication(DefaultAuthenticationTypes.ExternalCookie)] [AllowAnonymous] [Route("ExternalLogin", Name = "ExternalLogin")] [HttpGet] public async Task<IHttpActionResult> GetExternalLogin(string provider, string error = null) { string redirectUri = string.Empty; // HERE: User is always null. if (!User.Identity.IsAuthenticated) { return new ChallengeResult(provider, this); } // Rest of the code removed for brevity... } 应该在cookie中包含登录提供程序返回的数据/声明,但是User返回null;因此,挑战不会触发。

1 个答案:

答案 0 :(得分:0)

您需要为用户设置ClaimsPrinicpal并在控制器中使用“ AuthorizeToken”。 这基本上是在您获得令牌后设置的。完整的机制由Owin Pipeline控制。

您需要获取Owin上下文并取消保护令牌并将其分配给“ AuthenticationTicket”。 (AuthenticationTicket是“ Microsoft.Owin.Security”中的类)

axis.text.y

通过上述方式为“用户”分配值后,您将不会获得“用户”为空值,并且在分配身份后也可以获取身份。