Moh*_*ANE 8 android ruby-on-rails firebase firebase-authentication
我已经在我的Android应用程序中完全集成了Firebase Auth,现在我希望客户端使用独特的令牌与我的后端(rails)进行交互.我的问题是它是如何完成的:
谢谢
我开发了firebase_id_token gem。
它处理所有证书/签名业务。
它可以简单地用作:
FirebaseIdToken::Signature.verify(token)
Run Code Online (Sandbox Code Playgroud)
以 JinLiu 的答案为例,一旦您在 Android 代码中获取了 Token,请将其发送到后端:https://www.yourbackend.com?authenticate?token=asdad7687h ... 请注意,Firebase 生成的令牌是 JWT token ,我们需要先验证其真实性并在后端进行解码。为此,您需要将这两个 gem 添加到您的 gemfile gem 'jwt' , '1.5.6' gem 'rest-client' , '2.0.1' 完成后,您需要将这两个(私有)函数添加到你的控制器:
def get_set_user
begin
token = params[:token]
if token.nil?
@user = nil
return
end
firebase_id = verify_user(token)[0]["user_id"]
if User.where(:firebase_id => firebase_id).exists?
@user = User.where(:firebase_id => firebase_id).first
else
@user = User.new(:firebase_id => firebase_id)
@user.save
@user
end
rescue
@user = nil
end
end
def verify_user(token)
certificate_url = "https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com"
myresponse = RestClient.get(certificate_url).body
certificates = JSON.parse myresponse.gsub('=>', ':')
myjson =""
certificates.each do|key , value|
begin
x509 = OpenSSL::X509::Certificate.new(value)
iss = 'https://securetoken.google.com/<yourdomain>'
aud = 'yourdomain' # change this
myjson = JWT.decode(token, x509.public_key, true,
{ algorithm: "RS256", verify_iat: true ,
iss: iss , verify_iss: true ,
aud: aud , verify_aud: true
})
return myjson
rescue
end
end
return nil
end
Run Code Online (Sandbox Code Playgroud)
现在您可以像之前的操作一样调用 get_set_user 来查看用户是否具有有效的令牌。这个想法很简单。检查令牌是否由https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com中提到的密钥之一签名。如果是,则解码令牌并获取 firebase id 。
您不需要步骤#3。Firebase Auth Android SDK getToken() API 为登录用户返回一个短暂(一小时)的 Firebase Auth ID 令牌,如果前一个令牌过期,则会自动返回一个新令牌。
Firebase令牌验证文档描述了如何在客户端应用程序上获取 Firebase 令牌并在服务器端验证该令牌。
| 归档时间: |
|
| 查看次数: |
2961 次 |
| 最近记录: |