【问题标题】:Two-factor Authentication With fastlane使用 fastlane 的两因素身份验证
【发布时间】:2020-12-09 23:15:59
【问题描述】:

我在使用 CI 机器时将我的应用程序发布到 Firebase 分发抛出 Fastlane。 我面临 2FA 的问题。

我正在使用 Match 来检索我的证书。 这就是我在“Appfile”下的内容

app_identifier "com.example.example" # the bundle 
apple_id "appleAcount@gmail.com" # Your Apple
team_id "abcd..."  # Developer Portal Team ID
ENV["FASTLANE_USER"] = "appleAcount@gmail.com"
ENV["MATCH_PASSWORD"] = ""
ENV["FASTLANE_PASSWORD"] = ""
ENV["FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD"] = ""

这是我收到的错误:

为帐户启用了双因素身份验证(6 位代码) 'appleAcount@gmail.com' 有关二因素的更多信息 认证:https://support.apple.com/en-us/HT204915

如果您在非交互式会话(例如服务器或 CI) 退房 https://github.com/fastlane/fastlane/tree/master/spaceship#2-step-verification

(输入sms 退出此提示并选择受信任的电话号码 以短信形式发送代码)

(也可以设置环境变量 SPACESHIP_2FA_SMS_DEFAULT_PHONE_NUMBER 自动执行此操作)(阅读更多 在: https://github.com/fastlane/fastlane/blob/master/spaceship/docs/Authentication.md#auto-select-sms-via-spaceship_2fa_sms_default_phone_number)

请输入6位密码:

我已阅读此“https://docs.fastlane.tools/best-practices/continuous-integration/”但没有运气。谁能帮我解决这个问题?

【问题讨论】:

    标签: continuous-integration fastlane two-factor-authentication


    【解决方案1】:

    fastlane 团队在最近的版本中(从 2.157.02.163.0 到目前为止)做得很好❤,以支持在许多操作中使用 API key for App Store Connect APIpilotdelivermatch等 - 每个工具的状态为available here)。

    使用 API 密钥无需提供 Apple 帐户来验证和授权 fastlane 操作以在 App Store Connect 上执行操作,这也意味着您将不再在 CI 机器上遇到 2 因素问题或当会话失效时,必须通过fastlane spaceauth 手动重新生成会话。

    来自App Store Connect API Key page

    生成 API 密钥允许您为该密钥配置、验证和使用一项或多项 Apple 服务。密钥不会过期,但一旦创建就无法修改以访问更多服务。一次最多可以有 50 个活动键

    使用 API 密钥还有其他好处,这是推荐的解决方案,如 fastlane documentation 中所述:

    fastlane 历来使用带有用户名和密码的 Apple ID 使用基于 cookie 的 Web 会话进行身份验证。快车道将继续 使用相同的基于 cookie 的 Web 会话进行身份验证 App Store Connect API 的非官方版本。

    但是,建议在您使用 API Key 身份验证时 能够。好处包括:

    • 无需 2FA
    • 更好的性能
    • 文档化 API
    • 提高可靠性

    我不会在这里详细说明设置和使用 API 密钥的步骤,因为它已经在 the documentation 中进行了很好的解释,但这里是主要步骤:

    1. 从 App Store Connect 创建一个新的 API 密钥(您必须具有“帐户持有人”角色才能创建一个)并为其分配“应用程序管理员”角色(参见 Role permissions documentation),
    2. 将密钥及其信息存储在您的 CI 中,
    3. 在您的 Fastfile 中,使用存储在 2 中的值调用 app_store_connect_api_key 操作。
    4. 在调用动作时将 3. 返回的值作为api_key 参数传递,或者让动作自己从车道上下文中检索其值(如果支持的话)。

    由于会话无效导致的 2FA 问题:

    应该消失 :)

    【讨论】:

    • 这个方法很棒,但它有一个问题......它在大多数 CI 中不起作用,比如 Bitrise 和其他。在那里,仍然需要使用有效期为 30 天的基于会话的身份验证。 devcenter.bitrise.io/getting-started/…
    • 我从未使用过 Bitrise,但确实太糟糕了,他们不提供此选项(我的屏幕截图在 Github Actions 上),但这是 CI 的限制,而不是 fastlane。这可能会在未来发生变化,因为 Bitrise 已经弃用了旧的基于会话的 iOS Auto Provision 自动代码签名授权(但不支持 fastlane):blog.bitrise.io/app-store-connect-api-on-bitrise
    • @Vizllx 我们让它为 Bitrise 工作。我们刚刚将应用商店连接 api 密钥添加到机密中。
    • download_metadata 不接受 api_key 值,因此我无法使其工作。和想法?
    • 创建 API 密钥时,请确保为其赋予“应用程序管理员”角色。
    【解决方案2】:

    您需要设置一个环境变量 'FASTLANE_SESSION'='---\n....\n' 令牌。

    要获取此令牌,您需要使用以下命令手动进行身份验证:

    fastlane spaceauth -u YOUR_APP_STORE_EMAIL

    示例 fastlane spaceauth -u joe@test.com.

    您需要每 2-3 周(例如 30 天)重新验证您的会话。这个过程现在有点痛苦。

    【讨论】:

    • 我们的会话每 8 小时到期一次......这根本不是一个好的解决方案:/ 但至少它利用了我们的帐户被多个其他帐户邀请的事实。使用 API 密钥,我们必须要求每个客户端创建一个 API 密钥才能使自动化工作。
    • 在使用 fastlane spaceauth -u YOUR_APP_STORE_EMAIL 请求网络会话时出现错误“无法登录 App Store Connect”。但它通过使用 sudo (sudo fastlane spaceauth -u YOUR_APP_STORE_EMAIL) 调用它来修复。可能对任何人都有用。
    【解决方案3】:
    1. Users page 中创建一个新的 App Store Connect API 密钥

    2. 下载新创建的 API Key 文件 (.p8) 页面刷新后无法再次下载此文件

    3. 在您的项目中添加密钥

    lane :release do
      api_key = app_store_connect_api_key(
        key_id: "D383SF739",
        issuer_id: "6053b7fe-68a8-4acb-89be-165aa6465141",
        key_filepath: "./AuthKey_D383SF739.p8",
        duration: 1200, # optional (maximum 1200)
        in_house: false # optional but may be required if using match/sigh
      )
    
      pilot(api_key: api_key)
    end

    more details

    【讨论】:

    • 或者只是pilot在最后。
    猜你喜欢
    • 2020-05-16
    • 2014-12-03
    • 2017-04-08
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 2016-06-06
    相关资源
    最近更新 更多