API key
放在请求头里,例如
const axios = require('axios');
axios.get('https://api.example.com/users', {
headers: {
'x-api-key': 'YOUR_API_KEY'
}
})
.then(res => console.log(res.data))
.catch(err => console.error(err));
Token(jwt)
先调用登录api来获得token
POST http://localhost:3000/login
Content-Type: application/json
{
"username": "alice",
"password": "123456"
}
然后得到相应:
{
"message": "Login success",
"token": "eyJhbGciOiJIUzI1NiIsInR..."
}
然后带上这个token在请求头里:
def access_protected_resource(jwt_token):
url = f"{BASE_URL}/profile"
headers = {
"Authorization": f"Bearer {jwt_token}"
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
print("✅ 成功访问受保护资源:")
print(response.json())
else:
print("❌ 访问失败:", response.status_code, response.text)
OAuth2
1. 用户点击“用 Google 登录”
- 前端调用 Google 的 OAuth 2.0 授权接口,用户同意授权后,Google 返回一个 ID Token(JWT 格式)给前端。
2. 前端拿到 Google 的 ID Token
- 这是一个经过 Google 签名的 JWT,里面包含用户的身份信息(邮箱、姓名等)。
3. 前端把 ID Token 传给你的后端 API
- 比如放在请求头: makefileCopyEdit
Authorization: Bearer <Google ID Token>
或者放在请求体里。
4. 你的后端验证这个 Google ID Token
- 使用 Google 提供的公钥或者官方 SDK 验证签名和合法性。
- 验证通过后,解析出用户身份信息。
5. 后端根据用户身份生成自己的 JWT(可选)
- 你可以基于 Google 用户身份,生成自己的 JWT Token,用来后续访问你的服务。
- 这样你后端就不用每次都去验证 Google 的 ID Token。
6. 后端授权并返回资源
- 根据身份判断权限,返回用户可访问的数据。
✅ 具体技术细节
验证 Google ID Token
你可以使用 Google 官方库验证,比如 Python:
from google.oauth2 import id_token
from google.auth.transport import requests
def verify_google_token(token):
try:
idinfo = id_token.verify_oauth2_token(token, requests.Request(), CLIENT_ID)
# idinfo 里包含了用户信息,比如
userid = idinfo['sub']
email = idinfo['email']
return idinfo
except ValueError:
# token 无效
return None
CLIENT_ID
是你在 Google Cloud Console 注册的客户端 ID,必须验证,防止别人伪造 token。
生成自己服务器的 JWT(可选)
验证通过后,你可以生成自己的 JWT 给客户端:
import jwt
import datetime
def create_jwt(user_info):
payload = {
'sub': user_info['sub'],
'email': user_info['email'],
'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=1)
}
token = jwt.encode(payload, YOUR_SECRET_KEY, algorithm='HS256')
return token
这样,后续前端访问你服务器接口时,带上你的 JWT 就好了。