ASP.Net身份和Google身份验证问题

时间:2015-11-28 01:13:39

标签: asp.net asp.net-identity owin google-authentication

我在谷歌设置了这个项目,它给了我appid和秘密 enter image description here

我将id和秘密移到了StartUp.Auth

public class Startup
    {
        public void Configuration(IAppBuilder app)
        {

            app.CreatePerOwinContext<IdentityTestingDbContext>(IdentityTestingDbContext.Create);
            app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
            app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);

            app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                LoginPath = new PathString("/Account/Login"),
            });

            app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);


            app.UseGoogleAuthentication(
                clientId: "*********************.apps.googleusercontent.com ",
                clientSecret: "**************");


        }
    }

以下是外部登录的操作,我正在关注身份示例应用程序(install-package Microsoft.AspNet.Identity.Samples -Pre)。

[HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public ActionResult ExternalLogin(string provider, string returnUrl)
        {
            // Request a redirect to the external login provider
            var challenge = new ChallengeResult(provider, Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnUrl }));
            return challenge;
        }
        // Used for XSRF protection when adding external logins
        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);
            }
        }

        [AllowAnonymous]
        public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
        {
            var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
            if (loginInfo == null)
            {
                return RedirectToAction("Login");
            }

            var user = await UserManager.FindAsync(loginInfo.Login);
            if (user == null)
            {
                user = new ApplicationUser
                {
                    Email = loginInfo.Email,
                    UserName = loginInfo.DefaultUserName,
                    FirstName = string.Empty,
                    LastName = string.Empty
                };

                var result = await UserManager.CreateAsync(user);
                if (!result.Succeeded)
                {
                    return View("Error", result.Errors);
                }

                result = await UserManager.AddLoginAsync(user.Id, loginInfo.Login);
                if (!result.Succeeded)
                {
                    return View("Error", result.Errors);
                }
            }

            var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
            identity.AddClaims(loginInfo.ExternalIdentity.Claims);
            AuthenticationManager.SignIn(new AuthenticationProperties
            {
                IsPersistent = false
            }, identity);
            return Redirect(returnUrl ?? "/");
        }

我被重定向到谷歌但在这里我收到了一个错误。看起来我错过了什么,但无法弄清楚。我一直在寻找将近3个小时,并且找不到任何可以帮助解决这个问题的事情。

  1. 你看到我可能做错了吗?
  2. 为什么在下面的图片中重定向网址为http://localhost:58286/signin-google
  3. enter image description here

1 个答案:

答案 0 :(得分:4)

关注帮助

http://www.asp.net/mvc/overview/security/create-an-aspnet-mvc-5-app-with-facebook-and-google-oauth2-and-openid-sign-on

修复1: 对于上述问题主题中的Google设置屏幕,授权重定向网址必须为http://localhost:58286/signin-google。这不是帐户控制器内的回调方法。

修复2: 我还需要启用Google+ API,我在设置期间没有启用