因此,我一直在尝试在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);
}
据我所知,[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;因此,挑战不会触发。
答案 0 :(得分:0)
您需要为用户设置ClaimsPrinicpal并在控制器中使用“ AuthorizeToken”。 这基本上是在您获得令牌后设置的。完整的机制由Owin Pipeline控制。
您需要获取Owin上下文并取消保护令牌并将其分配给“ AuthenticationTicket”。 (AuthenticationTicket是“ Microsoft.Owin.Security”中的类)
axis.text.y
通过上述方式为“用户”分配值后,您将不会获得“用户”为空值,并且在分配身份后也可以获取身份。