【问题标题】:How to use Firebase Authentication with Okta?如何在 Okta 中使用 Firebase 身份验证?
【发布时间】:2020-07-17 03:04:31
【问题描述】:

我目前正在使用内置 OIDC 提供程序(Google、Facebook 等)在我的应用程序中使用 Firebase 身份验证。是否可以将 Okta 用作额外的 OIDC 提供程序,对我的应用程序进行最少的修改,这意味着 Okta 的行为应该与任何其他内置提供程序一样? Firebase Auth api,例如 firebase.auth().currentUserfirebase.auth().onAuthStateChanged() 应该仍然有效。

Custom Authentication 的文档页面讨论了从身份验证服务器获取自定义令牌,但没有说明这是否是 OAuth 访问令牌。是否有与 Firebase 身份验证无缝协作的 Okta 集成或通用 OIDC 集成示例?

【问题讨论】:

    标签: firebase-authentication openid-connect okta


    【解决方案1】:

    Firebase 身份验证没有内置的 Okta 提供程序,但如果您有现有的身份验证流程,则可以很容易地将其作为 custom provider 集成到 Firebase。

    这是一个 6 步过程:

    1. 您在客户端收集用户凭据。
    2. 您将这些凭据传递给受信任的环境,可以是您控制的服务器,也可以是 Cloud Functions。
    3. 在服务器上,您根据 Okta 验证凭据是否正确,通常是通过调用他们提供的服务器端 API 以及您提供的密钥。
    4. 然后,您可以将该调用的结果用于用户的mint a new ID token。这是 JWT,而不是 OAuth 访问令牌。
    5. 您将该 ID 令牌从服务器传回客户端。
    6. 然后客户端使用 ID 令牌调用 firebase.auth().signInWithCustomToken(token),以登录 Firebase 身份验证。

    【讨论】:

    • 感谢您的快速回复,弗兰克。但是收集用户凭据不会造成很大的安全漏洞吗? OIDC 的全部意义在于不必直接处理凭证。我希望我可以做这样的事情:运行Okta's OIDC Code Flow with PKCE,然后将返回的 OAuth 访问令牌和/或 ID 令牌提供给 firebase 以使其工作。目标是能够使用适当的 Firebase 用户访问 Firebase 资源(实时数据库等)。
    • 在这种情况下,凭据不是用户名+密码,而是 Okta 在验证用户身份后提供给您的任何内容。它可能相当于 OAuth 令牌或 ID 令牌。如果您按照我描述的步骤进行操作,您将获得一个 Firebase 用户,该用户也会出现在数据库的安全规则中。
    • 太棒了!让我试一试。几个简单的问题:1)在您的第 4 步中,当我致电 admin.auth().createCustomToken(uid) 时,是否创建了真正的 firebase 用户 - 这意味着我会在 Firebase 控制台中看到用户吗? 2) 有没有办法避免步骤 2 中的云功能?我的理解是 PKCE 流程旨在避免调用任何后端服务。
    • 1) 好问题。我实际上不确定用户是否会出现在 Firebase 身份验证控制台中。试一试,让我知道。 2) 铸造自定义代币需要一个可信的环境,否则任何人都可以铸造自定义代币。 PKCE 可以在没有它的情况下工作,但您需要受信任的环境将 Okta 令牌转换为 Firebase JWT/ID 令牌。
    • 在创建自定义令牌的云函数中遇到错误:“IAM API 之前未在项目 中使用或已禁用。通过访问console.developers.google.com/apis/api/iam.googleapis.com/…> 启用它”。当我访问此 URL 时,我收到错误消息“您至少缺少以下所需权限之一:项目 resourcemanager.projects.get、serviceusage.services.get”。我是项目的所有者,所以不明白这个错误。
    猜你喜欢
    • 2022-09-29
    • 1970-01-01
    • 2022-01-13
    • 2021-01-11
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 2021-10-18
    相关资源
    最近更新 更多