Итак, я пытался реализовать функцию входа через Facebook в приложении ASP.NET WebApi 2.
Но по какой-то причине, когда я пытаюсь проверить анонимные запросы:
if (!User.Identity.IsAuthenticated)
{
return new ChallengeResult(provider, this);
}
User
равно нулю.
Я уже установил режим аутентификации на None
на моем web.config
.
Web.config:
<system.web>
<authentication mode="None" />
<compilation debug="true" targetFramework="4.6.1" />
<httpRuntime targetFramework="4.6.1" />
<customErrors mode="Off" />
</system.web>
Кроме того, вот как я настраиваю конвейер для OAuth в моем классе Startup.cs:
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...
}
И этоВот как я настроил свой сервер разработки:
Насколько я знаю, User.Identity
должен содержать данные / утверждения, возвращенные провайдером логина, в файле cookie, ноПользователь возвращает ноль;следовательно, вызов не вызван.