Firebase 自定义身份验证传递令牌
Firebase Custom Authentication passing tokens
我是运行一个生成JWT令牌的Go服务器。我最初的计划是使用 http.Redirect 发送令牌,使用令牌字符串作为 url 的一部分。
这似乎不起作用,因为我使用的是 Firebase 静态托管,因此只有客户端路由。
如何推送我的令牌? Headers 也许吧?
- 我是 运行 我的 static SPA 'example.firebaseapp.com' (A)。
- 我是 运行 我的服务器 在 'example.us-west-2.compute.amazonaws.com' 上生成令牌 (B)
- cas 服务器 在“https://login.example.edu/cas/”上 运行 (C)
- 当然还有用户电脑(D)
流程如下
- 用户从静态主机加载网站 (A)
- 计算机 D 上的用户单击 'login through school' 按钮并被定向到我的服务器 (B)
- B 然后重定向到 cas 服务器 (C)。用户输入他的凭据并被重定向到计算机 B。
- 计算机 B 然后使用密钥和 uid 生成令牌。
- 此令牌需要以某种方式设置回用户
然后用户会调用
ref.authWithCustomToken("AUTH_TOKEN", function(error, authData) {
转到服务器代码
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)
}
如果我对流程的理解正确,那么您缺少的是您的应用用户与之交谈的端点,并且可以 return 该用户的令牌。
解决此问题的方法是让用户应用程序在第 2 步中传递一个高度不可猜测的值("request ID"),例如 UUID。然后,令牌服务器可以在 /tokens/<requestID>
中的第 5 步将令牌写入 Firebase 数据库,客户端正在侦听它。
我是运行一个生成JWT令牌的Go服务器。我最初的计划是使用 http.Redirect 发送令牌,使用令牌字符串作为 url 的一部分。
这似乎不起作用,因为我使用的是 Firebase 静态托管,因此只有客户端路由。
如何推送我的令牌? Headers 也许吧?
- 我是 运行 我的 static SPA 'example.firebaseapp.com' (A)。
- 我是 运行 我的服务器 在 'example.us-west-2.compute.amazonaws.com' 上生成令牌 (B)
- cas 服务器 在“https://login.example.edu/cas/”上 运行 (C)
- 当然还有用户电脑(D)
流程如下
- 用户从静态主机加载网站 (A)
- 计算机 D 上的用户单击 'login through school' 按钮并被定向到我的服务器 (B)
- B 然后重定向到 cas 服务器 (C)。用户输入他的凭据并被重定向到计算机 B。
- 计算机 B 然后使用密钥和 uid 生成令牌。
- 此令牌需要以某种方式设置回用户
然后用户会调用
ref.authWithCustomToken("AUTH_TOKEN", function(error, authData) {
转到服务器代码
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)
}
如果我对流程的理解正确,那么您缺少的是您的应用用户与之交谈的端点,并且可以 return 该用户的令牌。
解决此问题的方法是让用户应用程序在第 2 步中传递一个高度不可猜测的值("request ID"),例如 UUID。然后,令牌服务器可以在 /tokens/<requestID>
中的第 5 步将令牌写入 Firebase 数据库,客户端正在侦听它。