是否可以将Firebase Auth合并到ASP.NET Core MVC中?

Sam*_*rie 5 asp.net-mvc firebase firebase-authentication asp.net-core

我正在努力构建一个Ionic移动应用程序,我计划使用Firebase的auth和实时数据库产品.我试图了解是否可以将Firebase auth合并到关联的ASP.NET Core MVC站点内的服务器端处理中.这将允许我使用一些"静态"服务器端页面来处理订阅,付款等,但仍然使用与移动应用程序相同的基于Firebase的用户方案.

我知道Firebase面向javascript客户端,我发现这个验证包含Authorization asp.net核心内API 头部请求的示例,因此可以在asp.net管道中验证firebase令牌.但是,这假设javascript客户端正在发出所有请求,而我想将令牌存储在某些cookie中,我可以让浏览器无缝地提供.这将让我处理我的应用程序中的静态,非JavaScript页面上的身份验证.

我认为必须有一些方法来启动对firebase的身份验证,并将响应重定向到MVC操作.然后你可能会在asp.net中设置一个"indentity"cookie,它会在页面刷新时保持不变.或者我只是基于我对其工作原理的理解?

评论Firebase身份验证asp.net核心的可能重复:

在我看来,这不是一个骗局,因为这个问题正在讨论验证客户端提供的JWT令牌(可能是javascript).我相信我最初包含的链接演示了解决该问题的方法.

小智 0

在登录方法中,您可以创建一个 firebase 会话 cookie 并将该 cookie 添加到响应中。例如

   var sessionCookie = await FirebaseAuth.DefaultInstance
        .CreateSessionCookieAsync(request.IdToken, options);

    // Set cookie policy parameters as required.
    var cookieOptions = new CookieOptions()
    {
        Expires = DateTimeOffset.UtcNow.Add(options.ExpiresIn),
        HttpOnly = true,
        Secure = true,
    };
    this.Response.Cookies.Append("session", sessionCookie, cookieOptions);
Run Code Online (Sandbox Code Playgroud)

这样,您就可以在发送到服务器的其他请求中获取该 cookie。可能是简单的页面加载请求,不涉及任何js。更好的方法不是在每个请求中进行验证,而是覆盖本机授权属性,并提供自定义实现来验证会话 cookie 是否仍然有效或以其他方式重定向到登录。

var sessionCookie = this.Request.Cookies["session"];
if (string.IsNullOrEmpty(sessionCookie))
{
    // Session cookie is not available. Force user to login.
    return this.Redirect("/login");
}

try
{
    // Verify the session cookie. In this case an additional check is added to detect
    // if the user's Firebase session was revoked, user deleted/disabled, etc.
    var checkRevoked = true;
    var decodedToken = await FirebaseAuth.DefaultInstance.VerifySessionCookieAsync(
        sessionCookie, checkRevoked);
    return ViewContentForUser(decodedToken);
}
Run Code Online (Sandbox Code Playgroud)

如果您根本不想使用客户端 SDK 登录用户,您还可以选择使用方法signInWithCustomToken,同时使用接受用户 UID 的 CreateCustomTokenAsync 在服务器端生成自定义令牌。如果您有任何疑问,请告诉我。