仅使用ASP.NET MVC 5进行社交登录

时间:2016-05-16 17:02:19

标签: oauth asp.net-mvc-5 asp.net-identity session-cookies claims-based-identity

我的应用程序需要支持Google+登录 。数据库中没有内部用户或任何额外的用户。我能够配置这些内容,以便Google通过身份信息点击以下操作:

    [AllowAnonymous]
    public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
    {
        ExternalLoginInfo loginInfo = await HttpContext.GetOwinContext().Authentication.GetExternalLoginInfoAsync();
        if (loginInfo == null)
        {
            return RedirectToAction("Login");
        }
        // what do I do here ?????????
    }

我的理解是,我需要以某种方式将Google返回的声明存储到会话cookie中,但我不知道该怎么做。我应该首先将ExternalLoginInfo转换为IPrincipal吗?如何在后续请求中实例化主体?<​​/ p>

我的初始化代码是:

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

    app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

    // bla-bla-bla
    app.UseGoogleAuthentication(googleAuthOptions);

2 个答案:

答案 0 :(得分:1)

如果您不想要任何身份表,我认为身份证明不适合您。它会在数据库中保留声明和登录,我认为你无法做到这一点。

在这个狭窄的场景中,如果你自己动手,实际上可能会更好。只需按照Google API文档操作即可手动执行登录。此时,您基本上将所有身份验证外包,因此不依赖于像Identity这样的更标准的身份验证框架,不会带来很多安全隐患。您甚至可以找到仅使用Google Auth的Nuget包。

答案 1 :(得分:0)

你不需要做任何事情。

  1. 他们在客户端进行了身份验证(给了他们一个cookie),然后
  2. 您在后端为谷歌正确设置了Owin中间件。
  3. 这照顾了一切。 我相信Owin中间件不会自动将用户注册到数据库中。 根据您在前端要求的范围,它将能够为您提供原则上的用户的一些详细信息。 (MS将它们转换为对你的索赔)。

相关问题