繁体   English   中英

C#-Owin Oauth不会重定向到外部登录页面

[英]C# - Owin Oauth doesn't redirect to external login page

今天,我试图在我的项目中实现外部Facebook登录。 但是当我尝试登录以调用ExternalLogin的方法登录时,此方法不会返回Facebook登录页面

我试图这样做: https//coding.abel.nu/2014/06/understanding-the-owin-external-authentication-pipeline/

当我看到上下文时,AuthenticationResponseChallenge为null。

遵循代码:

Startup.Auth.cs

     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);
        }
    }

我尝试使用我的Facebook应用程序凭据创建一个空项目,并且工作正常,但是在此项目中这不起作用

有人可以帮助我吗?

一天后,我找到了解决方案

我的webconfig与

<authentication mode="Forms">
  <forms loginUrl="~/Login" name=".ASPXFORMSAUTH" />
</authentication>

当我改变为

<authentication mode="None" />

提交表单后,挑战者开始重定向到Facebook登录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM