API 认证方式科普 (For React Native Developers)

7 阅读4分钟

API 认证方式科普 (For React Native Developers)

在移动端开发(如 React Native)中,我们经常需要与后端 API 进行交互。为了保证安全,API 通常需要进行身份验证(Authentication)。你在 Postman 或其他 API 调试工具中看到的那些选项,就是不同的认证标准和协议。

本文档旨在为你解释这些常见的认证方式,以及在 React Native 中如何使用它们。


1. No Auth (无认证)

含义:不需要任何身份验证即可访问 API。 场景:公开的 API,如获取天气信息、公共新闻列表等。 RN 实现:直接发起请求即可。

fetch('https://api.public.com/news');

2. API Key

含义:通过一个固定的密钥(Key)来标识调用者。通常在请求头(Header)或 URL 参数(Query Param)中传递。 场景:第三方服务(如 Google Maps、高德地图),用于统计用量和简单的权限控制。 RN 实现

// 方式 A: URL 参数
fetch('https://api.example.com/data?api_key=YOUR_API_KEY');

// 方式 B: Header (更常见)
fetch('https://api.example.com/data', {
  headers: {
    'x-api-key': 'YOUR_API_KEY'
  }
});

3. Bearer Token

含义:一种通用的令牌认证方式。"Bearer" 的意思是“持有者”,即“谁拿着这个令牌,谁就有权限”。 场景:最常见的现代 API 认证方式,通常结合 OAuth 2.0 使用。 RN 实现:在 Authorization Header 中添加 Bearer <Token>

const token = 'eyJhbGciOi...'; // 从登录接口获取的 Token
fetch('https://api.example.com/profile', {
  headers: {
    'Authorization': `Bearer ${token}`
  }
});

4. JWT Bearer

含义:JSON Web Token (JWT) 是一种具体的 Token 格式。JWT Bearer 实际上就是使用 JWT 格式的 Bearer Token。 特点:Token 本身包含用户信息(Payload),后端无需查库即可验证 Token 有效性(通过签名)。 场景:现代 Web 和移动应用的标准登录态维持。 RN 实现:同 Bearer Token。


5. Basic Auth

含义:最基础的认证方式。将 username:password 拼接后进行 Base64 编码,放入 Header 中。 格式Authorization: Basic <Base64(username:password)> 场景:旧系统、内部简单的服务,或者获取 OAuth Token 的第一步(如你的 SalaryTokenApiService.js 中看到的那样)。 RN 实现

import { btoa } from 'react-native-quick-base64'; // 或其他 Base64 库

const username = 'admin';
const password = '123';
const encoded = btoa(`${username}:${password}`);

fetch('https://api.example.com/login', {
  headers: {
    'Authorization': `Basic ${encoded}`
  }
});

6. Digest Auth (摘要认证)

含义:Basic Auth 的升级版。密码不直接发送,而是发送密码的哈希(摘要)。服务器和客户端进行一系列随机数(Nonce)交换来验证身份。 场景:比 Basic Auth 安全,但实现复杂,现代 API 开发中很少使用(被 HTTPS + Token 取代)。 RN 实现:手动实现非常繁琐,通常需要依赖专门的库(如 react-native-digest-auth,但不推荐新项目使用)。


7. OAuth 1.0

含义:一种早期的开放授权标准。使用签名机制,请求参数极其复杂(Timestamp, Nonce, Signature 等)。 场景:非常老旧的系统(如早期的 Twitter API)。 RN 实现极不推荐手动实现。必须使用专门的 OAuth 1.0 库(如 oauth-1.0a)。


8. OAuth 2.0

含义:目前行业标准的授权协议。它不是一种单一的认证方式,而是一个流程流程

  1. 客户端(APP)向授权服务器请求授权。
  2. 用户同意。
  3. 客户端拿到 Access Token。
  4. 客户端用 Access Token (通常是 Bearer Token) 访问资源服务器。 场景:微信登录、Google 登录、企业级应用认证。 RN 实现:通常配合 react-native-app-auth 等库来处理复杂的重定向和 Token 交换流程。

9. Hawk Authentication

含义:一种基于消息认证码(MAC)的认证方案,类似 OAuth 1.0 的简化版,主要用于 HTTP 请求的部分加密校验。 场景:极少见,主要用于一些对安全性有特殊要求但不想上完整 TLS/SSL 的微服务。 RN 实现:需使用 hawk 库。


10. AWS Signature (AWS 签名)

含义:亚马逊云服务(AWS)专用的 API 认证方式。需要使用 Access Key 和 Secret Key 对请求进行复杂的哈希签名(HMAC-SHA256)。 场景:直接在 APP 端调用 AWS 服务(如 S3 上传、Lambda 调用)。 RN 实现:通常不手动实现,而是使用 aws-amplify SDK,它会自动处理签名。


11. NTLM Authentication

含义:微软 Windows 系统的专有认证协议(New Technology LAN Manager)。 场景:企业内部网(Intranet),基于 IIS 的服务器,SharePoint 等。 RN 实现:React Native 很难原生支持 NTLM。通常需要原生模块支持或中间层代理。


12. Akamai EdgeGrid

含义:Akamai CDN 网络的专用 API 认证协议。 场景:管理 Akamai CDN 配置时使用。 RN 实现:作为移动端开发者几乎碰不到,这是服务端运维或 DevOps 关心的。


总结:RN 开发最常用的

作为 React Native 开发者,你 99% 的时间只会用到以下三种:

  1. Bearer Token (JWT): 用户登录后,后端给你一个 Token,你把它存到 AsyncStorageMMKV,之后的请求都在 Header 里带上 Authorization: Bearer <token>
  2. API Key: 调用地图、统计等第三方 SDK 时配置。
  3. Basic Auth: 偶尔在登录接口或测试环境中使用。

希望这份指南能帮你理清这些概念!