我的应用程序需要支持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);
答案 0 :(得分:1)
如果您不想要任何身份表,我认为身份证明不适合您。它会在数据库中保留声明和登录,我认为你无法做到这一点。
在这个狭窄的场景中,如果你自己动手,实际上可能会更好。只需按照Google API文档操作即可手动执行登录。此时,您基本上将所有身份验证外包,因此不依赖于像Identity这样的更标准的身份验证框架,不会带来很多安全隐患。您甚至可以找到仅使用Google Auth的Nuget包。
答案 1 :(得分:0)
你不需要做任何事情。
这照顾了一切。 我相信Owin中间件不会自动将用户注册到数据库中。 根据您在前端要求的范围,它将能够为您提供原则上的用户的一些详细信息。 (MS将它们转换为对你的索赔)。