Skip to content

身份验证

验证你的用户

大多数应用都需要了解用户是谁,以便他们可以使用你的应用安全地连接到外部服务,如你的 API 或云服务。

在移动应用中,你始终需要调用外部服务(用户设备之外的服务)作为用户凭据的真实来源。它可以是你管理的服务,也可以是第三方服务,如 WorkOS、Auth0 或 Amazon Cognito。

验证用户有两个目的:

  1. 当他们连接到你的 API 时,它允许你证明他们是谁。
  2. 它给你机会根据用户的身份验证状态授予或拒绝访问应用的某些功能。

虽然为了方便,一些用户数据可能存储在用户设备上,但你不应该依赖这些数据来验证用户。这是因为数据在你的控制之外。因此,你不会使用典型的 Laravel 身份验证机制来检查已验证的用户。

提示

如果你希望根据用户的账户级别或状态启用或禁用应用的某些部分,请确保定期根据服务器数据检查他们的资格,并在设备上尽可能短时间地缓存它。

Token 万岁!

大多数移动应用选择某种形式的"身份验证令牌"(例如 JWT 或过期的 API 密钥),由你的身份验证服务生成并安全存储在用户设备上。

这些令牌应该只存在很短的时间,通常不超过几天。当用户成功验证时,与用户共享一个存在更长时间(例如 30 天)的一次性"刷新令牌"也很有用。当用户的当前身份验证令牌过期时,可以用它来换取新的身份验证令牌。

你应该将身份验证和刷新令牌都存储在安全存储中。检查身份验证令牌的存在以验证用户已通过身份验证是_不够的_。 如果令牌已过期或被撤销,你应该强制用户重新验证。确定的唯一方法是使用令牌。

专业提示!

在进行 API 调用之前,使用 Native\Mobile\Facades\Network::status() 来确定设备是否已连接到互联网。

Laravel Sanctum

Laravel Sanctum 是为用户生成身份验证令牌的非常方便且易于使用的机制。他们只需提供登录凭据,如果通过验证,就会收到一个令牌。使用简单的登录表单,你可以在应用中收集他们的用户名和密码,并通过 API 调用安全地将其 POST 到你的身份验证服务。

请注意,默认情况下,Sanctum 令牌不会过期。 你应该启用令牌过期以提高安全性。只有当你的应用尝试使用令牌失败时,你才可能发现令牌已过期。

OAuth

OAuth 是移动应用身份验证问题的强大且经过实战检验的解决方案。如果你正在运行 Laravel Passport 或你的身份验证服务支持 OAuth,你应该使用它!

你可能需要在应用中使用 OAuth 客户端库来更轻松地与 OAuth 服务交互。

在为用户启动身份验证流程时,你应该使用 Native\Mobile\Facades\Browser::auth() API,因为它是专门为从 OAuth 服务安全地将授权代码传递回你的应用而构建的。

为此,你必须设置一个对用户设备上的应用程序唯一的 NATIVEPHP_DEEPLINK_SCHEME

dotenv
NATIVEPHP_DEEPLINK_SCHEME=myapp

然后你必须定义重定向 URL。它应该与你的 scheme 和应用中处理回调数据的路由匹配。

php
Browser::auth('https://workos.com/my-company/auth?redirect=myapp://auth/handle')

大多数服务会要求你预先定义重定向 URL 作为安全功能。你应该能够提供确切的 URL,因为这将是最安全的方法。

你如何在应用中处理响应取决于该特定 API 的操作方式和应用的需求。

安全

如果你正在运行自己的身份验证服务,请确保其身份验证端点周围有良好的安全性。由于它将通过 API 从许多设备被未经身份验证的用户访问,标准浏览器安全——如 CSRF 保护——将不可用

确保你有适当的速率限制,甚至考虑使用仅用于访问身份验证端点的身份验证密钥,你将其与应用一起分发。这些步骤都将有助于保护端点免受滥用。

基于 NativePHP 官方文档翻译