Firebase自定义身份验证传递令牌

时间:2016-03-19 20:36:22

标签: go firebase firebase-authentication

我正在运行生成JWT令牌的Go服务器。我最初的计划是使用http.Redirect使用令牌字符串作为URL的一部分来发送令牌。

这似乎不起作用,因为我使用的是Firebase静态托管,因此只有客户端路由。

如何推送令牌?标题可能是?

  • 我在'example.firebaseapp.com'(A)上运行静态 SPA。
  • 我在'example.us-west-2.compute.amazonaws.com'上运行我的服务器生成令牌(B)
  • cas服务器正在“https://login.example.edu/cas/”上运行(C)
  • 当然还有用户的电脑(D)

流程如下

  1. 来自静态主机(A)的用户加载网站
  2. 计算机上的用户D点击“通过学校登录”按钮,然后转到我的服务器(B)
  3. B然后重定向到cas服务器(C)。用户输入他的凭据并被重定向到计算机B.
  4. 计算机B然后使用密钥和uid生成令牌。
  5. 此令牌需要以某种方式设置回用户 然后,用户将拨打ref.authWithCustomToken("AUTH_TOKEN", function(error, authData) {
  6. 转到服务器代码

        func (h *myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
          if !cas.IsAuthenticated(r) {
            cas.RedirectToLogin(w, r)
            return
          }
    
        if r.URL.Path == "/logout" {
            cas.RedirectToLogout(w, r)
            return
        }
    
      generatedToken := generateToken("uid") // token is created using a uid and a secret
        redirectURL := websiteURL + generatedToken
        println(redirectURL)
    
        println(generatedToken)
        http.Redirect(w, r, redirectURL, http.StatusFound) // I attempt to send the token using a redirect. This doesn't seem to work though since the static server only supports routing for '/'. 
        //html.WriteTo(w)
    
        }
    

1 个答案:

答案 0 :(得分:3)

如果我正确理解了流量,那么您所缺少的是您的应用用户与之对话的终点,并且可以将令牌返回给该用户。

对此的解决方法是让用户应用程序在步骤2中传递一个高度不可取的值(“请求ID”),类似于UUID。然后令牌服务器可以在/tokens/<requestID>中的步骤5中将令牌写入Firebase数据库,客户端正在侦听它。