今日、私は自分のプロジェクトに外部Facebookのログインを実装しようとしました。C# - Owin Oauthが外部ログインページにリダイレクトしない
しかし、私はExternalLoginのメソッドを呼び出してログインしようとすると、この方法は、Facebookのログインページに戻りませんが、私はこれを行うことを試みた: https://coding.abel.nu/2014/06/understanding-the-owin-external-authentication-pipeline/
を、私は私の文脈を見るとAuthenticationResponseChallengeはnullです。
は、コードに従ってください:
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
var fao = new FacebookAuthenticationOptions
{
AppId = APP_ID_FACEBOOK, //on Web.config
AppSecret = APP_SECRET_FACEBOOK //on Web.config
};
fao.Scope.Add("email");
fao.Scope.Add("basic_info");
fao.Provider = new FacebookAuthenticationProvider()
{
OnAuthenticated = (context) =>
{
context.Identity.AddClaim(new System.Security.Claims.Claim("urn:facebook:access_token", context.AccessToken, XmlSchemaString, "Facebook"));
foreach (var x in context.User)
{
var claimType = string.Format("urn:facebook:{0}", x.Key);
string claimValue = x.Value.ToString();
if (!context.Identity.HasClaim(claimType, claimValue))
context.Identity.AddClaim(new System.Security.Claims.Claim(claimType, claimValue, XmlSchemaString, "Facebook"));
}
return Task.FromResult(0);
}
};
fao.SignInAsAuthenticationType = DefaultAuthenticationTypes.ExternalCookie;
app.UseFacebookAuthentication(fao);
AccountController.cs
public ActionResult ExternalLogin(string provider, string returnUrl)
{
var result = new ChallengeResult(provider, Url.Action("ExternalLoginCallback", "Conta", new { ReturnUrl = returnUrl }));
return result;
}
private const string XsrfKey = "XsrfId";
internal class ChallengeResult : HttpUnauthorizedResult
{
public ChallengeResult(string provider, string redirectUri)
: this(provider, redirectUri, null)
{
}
public ChallengeResult(string provider, string redirectUri, string userId)
{
LoginProvider = provider;
RedirectUri = redirectUri;
UserId = userId;
}
public string LoginProvider { get; set; }
public string RedirectUri { get; set; }
public string UserId { get; set; }
public override void ExecuteResult(ControllerContext context)
{
var properties = new AuthenticationProperties { RedirectUri = RedirectUri };
if (UserId != null)
{
properties.Dictionary[XsrfKey] = UserId;
}
context.HttpContext.GetOwinContext().Authentication.Challenge(properties, LoginProvider);
}
}
Startup.Auth.cs私は、私のFacebookアプリの資格情報を使用して空のプロジェクトを作成しようとしましたし、うまく働きましたこのプロジェクトではこれは動作しません
誰かが私を助けることができますか?
それは機能しないとはどういう意味ですか?あなたはそれを説明できますか? –
チャレンジャーはfacebookでログインするためのURLを作成せず、ExternalLoginのレスポンスは302で空です – aarcangelo