ani*_*l90 2 android jwt firebase firebase-authentication google-cloud-functions
我已经使用express在节点中编写了api并将其托管在firebase函数上。我正在尝试使用 firebase 身份验证来保护 api。
用户使用 Google 身份验证登录我的 Android 应用程序后,我将获取 firebase jwt 令牌并在授权标头中使用它。但我得到了 403 未经授权。当我检查 firebase 函数日志时,我看到了错误
Error while verifying Firebase ID token: { Error: Decoding Firebase ID token failed. Make sure you passed the entire string JWT which represents an ID token. See https://firebase.google.com/docs/auth/admin/verify-id-tokens for details on how to retrieve an ID token.
at FirebaseAuthError.FirebaseError [as constructor] (/srv/node_modules/firebase-admin/lib/utils/error.js:42:28)
at FirebaseAuthError.PrefixedFirebaseError [as constructor] (/srv/node_modules/firebase-admin/lib/utils/error.js:88:28)
Run Code Online (Sandbox Code Playgroud)
获取 firebase jwt 令牌的代码
private fun updateUI(user: FirebaseUser) {
user.getIdToken(false)
.addOnCompleteListener {
if (it.isSuccessful) {
val token = it.result!!.token
if (token != null) {
Timber.d("token: $token")
sharePref.put("token", token)
presenter.getData(1)
}
}
}
val header = navView.getHeaderView(0)
header.user_name.text = user.displayName
header.user_email.text = user.email
picasso.load(user.photoUrl).into(header.imageView)
}
Run Code Online (Sandbox Code Playgroud)
firebase admin sdk 令牌验证代码
var validateFirebaseIdToken = async function (req, res, next) {
if (!req.headers.authorization || !req.headers.authorization.startsWith('Bearer ')) {
console.error('No Auth Headers Found')
res.status(403).send('Unauthorized');
return;
}
let idToken;
if (req.headers.authorization && req.headers.authorization.startsWith('Bearer ')) {
console.log('Found "Authorization" header');
// Read the ID Token from the Authorization header.
idToken = req.headers.authorization.split('Bearer')[1];
console.log("fire token : "+idToken);
}
try {
const decodedIdToken = await admin.auth().verifyIdToken(idToken);
console.log('ID Token correctly decoded', decodedIdToken);
req.user = decodedIdToken;
next();
return;
} catch (error) {
console.error('Error while verifying Firebase ID token:', error);
res.status(403).send('Unauthorized');
return;
}
}
app.use(cookieParser);
app.use(validateFirebaseIdToken);
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用不同的 firebase 帐户,但没有成功。
我究竟做错了什么。
我终于弄明白了。拆分 JWT 令牌时发生错误
idToken = req.headers.authorization.split('Bearer ')[1]; -->needed a space
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2132 次 |
| 最近记录: |