身份验证和授权简介

2025-06-10

身份验证和授权简介

谈到身份验证 (Auth) 时,早期开发者很容易混淆身份验证 (Authentication) 和授权 (Authorization) 之间的区别。虽然两者经常被混用,但实际上它们的含义完全不同。在本文中,我将详细解释每个术语的具体含义,以及为什么在应用程序中实现它们都至关重要。此外,我还会展示我最近在最新应用中如何实现身份验证 (Auth)。

验证

身份验证是验证用户身份是否与其声称的身份相符的过程。身份验证通过获取某种凭证并使用这些凭证来验证用户身份来完成。您可以使用多种方法来验证用户身份,例如简单的用户名或密码组合、验证码测试或 2FA(双因素身份验证)。如果用户的凭证被证明有效,则可以执行授权流程。身份验证流程始终会进入授权流程。

授权

授权是指授予用户访问您应用中特定功能和资源的权限。用户成功通过身份验证后,授权将决定他们访问您系统的能力和权限范围。授权的方式有很多,您可以直接在您的网站或应用上进行授权,也可以通过 Google 或 Facebook 等第三方平台来启用访问用户通讯录或日历等内容的功能。

替代文本

在我最近的应用中,我使用谷歌对用户进行身份验证和授权。这是一种非常常见的做法:用户被重定向到谷歌,谷歌验证用户的身份,并向他们提供一个独一无二的授权码。然后,用户带着授权码返回到你的应用进行身份验证,你可以用授权码从谷歌兑换访问令牌。这反过来可以授予你的应用访问日历或联系人等用户信息的权限。你可以在谷歌开发者控制台注册一个项目,轻松地在你的应用中使用谷歌进行身份验证,然后让他们使用用户已有的谷歌账户对用户进行身份验证。这反过来又可以让你轻松实现OAuth 2.0,这似乎正在成为用户授权的标准。

  //function to sign in with google auth
  const googleSignIn = async () => {
    try {
      const { type, user, accessToken } = await Google.logInAsync({
        iosClientId: IOS_AUTH_KEY,
        androidClioentId: ANDROID_AUTH_KEY,
        scopes: ["profile", "email"]
      })
      if (type === "success") {
        //key values to add to the userInfo global state
        axios.get(`${AXIOS_URL}/users/${user.email}`)
          .then(res => setUserInfo(userInfo => ({
            ...userInfo,
            signedIn: true,
            username: user.username,
            email: user.email,
            photoUrl: res.data.photo,
            id: res.data.id
          })))
          .catch(error => console.log('failed to find user', error));
      }
    } catch (error) {
      console.log(error)
    }
  }

这篇文章介绍的是我如何在 React Native 应用中使用 Expo 和 Google 进行用户身份验证。如果你正在开发移动应用,我强烈建议你尝试一下 Expo 和 React Native。Expo 内置了大量 API,其中很多可以简化身份验证流程。正如你从上面的代码中看到的,在 Expo 的帮助下,我能够通过一个相对简单的函数完成身份验证和授权。在 Google 上注册我的应用后,我获得了 Android 和 iOS 用户的身份验证密钥。用户身份验证通过后,Google 会返回一个访问令牌,允许访问用户的个人资料和电子邮件地址,我们可以立即保存这些令牌并在我们的应用中使用。这种简化的身份验证不仅易于实现,还能带来更便捷的用户体验。

简单来说,身份验证是指确认您的身份,而授权是指授予系统访问权限。身份验证是验证您身份的过程,而授权是验证您有权访问哪些内容的过程。希望本文能帮助您理解两者之间的区别,以及它们为何如此重要,并且通常被同时提及。

鏂囩珷鏉ユ簮锛�https://dev.to/ryanmoragas/into-to-authentication-authorization-3122
PREV
细粒度思考:SolidJS 为何如此高效?
NEXT
使用适用于 Linux 的 Windows 子系统进行 Web 开发