Firebase Cloud Functions:检查已撤销的令牌
Firebase Cloud Functions: check for revoked token
我正在尝试使用声明在 firebase 中创建管理角色,并在 Cloud Functions 环境中检查 onCall
方法中的角色。我假设 context.auth.token
会被验证,但似乎用户从管理员更改为普通用户(或对用户进行任何其他编辑,使用 admin.auth().revokeRefreshTokens(uid)
撤销身份验证令牌) 实际上并没有立即撤销权限,或者编辑用户在随后的 onCall 上未验证令牌:
export const someFunction = functions.https.onCall((data, context) => {
const isAdmin = context.auth?.token.admin === true
...
}):
导致 isAdmin 在撤销用户令牌(并将 admin 设置为 false)后仍然为真。
检查这个的合适方法是什么?我尝试手动验证 context.instanceIdToken
,但未(始终)设置。我拨打的所有电话都已登录。
如有指点,我们将不胜感激。如您所知,'revoking admin access' 通常是一个应该立即执行的操作。
您的令牌中的 admin
是自定义声明,客户端将其作为其 ID 令牌的一部分与每个请求一起发送到 Cloud Functions。客户端上的 ID 令牌每小时刷新一次。因此,在您 add/remove 自定义声明之后,客户最多可能需要一个小时才能收到它,并将其传递给 Cloud Functions。
生成 ID 令牌时,它会获得一个过期时间戳。在该时间戳过去之前,ID 令牌被假定为有效。由于 Firebase 的 ID 令牌通常在一小时内有效,因此在您对基础用户配置文件进行更改后,它们最多仍可使用一小时。
您可以强制客户端在此之前刷新其 ID 令牌,方法是调用 getIDToken(true)
API (Android link, but other platforms have a similar API). Also see the section in the documentation on propagating custom claims to the client。但这取决于客户端,所以不好足够安全。
为确保更新后的令牌不再可用,您需要创建此类 "revoked" 令牌的列表。然后让您的 Cloud Functions 检查已撤销令牌的列表,如果令牌已在那里失效,则拒绝请求。有关此示例,请参阅 detecting ID token revocation.
上的 Firebase 文档中的示例
我正在尝试使用声明在 firebase 中创建管理角色,并在 Cloud Functions 环境中检查 onCall
方法中的角色。我假设 context.auth.token
会被验证,但似乎用户从管理员更改为普通用户(或对用户进行任何其他编辑,使用 admin.auth().revokeRefreshTokens(uid)
撤销身份验证令牌) 实际上并没有立即撤销权限,或者编辑用户在随后的 onCall 上未验证令牌:
export const someFunction = functions.https.onCall((data, context) => {
const isAdmin = context.auth?.token.admin === true
...
}):
导致 isAdmin 在撤销用户令牌(并将 admin 设置为 false)后仍然为真。
检查这个的合适方法是什么?我尝试手动验证 context.instanceIdToken
,但未(始终)设置。我拨打的所有电话都已登录。
如有指点,我们将不胜感激。如您所知,'revoking admin access' 通常是一个应该立即执行的操作。
您的令牌中的 admin
是自定义声明,客户端将其作为其 ID 令牌的一部分与每个请求一起发送到 Cloud Functions。客户端上的 ID 令牌每小时刷新一次。因此,在您 add/remove 自定义声明之后,客户最多可能需要一个小时才能收到它,并将其传递给 Cloud Functions。
生成 ID 令牌时,它会获得一个过期时间戳。在该时间戳过去之前,ID 令牌被假定为有效。由于 Firebase 的 ID 令牌通常在一小时内有效,因此在您对基础用户配置文件进行更改后,它们最多仍可使用一小时。
您可以强制客户端在此之前刷新其 ID 令牌,方法是调用 getIDToken(true)
API (Android link, but other platforms have a similar API). Also see the section in the documentation on propagating custom claims to the client。但这取决于客户端,所以不好足够安全。
为确保更新后的令牌不再可用,您需要创建此类 "revoked" 令牌的列表。然后让您的 Cloud Functions 检查已撤销令牌的列表,如果令牌已在那里失效,则拒绝请求。有关此示例,请参阅 detecting ID token revocation.
上的 Firebase 文档中的示例