本页面介绍如何使用 Cloud Endpoints Frameworks 在您的 API 中添加对于通过客户端应用进行用户身份验证的支持。请注意,目前支持 Android 和 JavaScript 客户端。
Endpoints Frameworks 支持通过使用以下任何方法的客户端应用对用户进行身份验证:
无论您使用哪种身份验证方法,在需要检查身份验证是否正确的每种 API 方法中,都必须检查是否存在有效的 User
,具体如以下部分所述:
前提条件
本页面假定您已经完成以下操作:
已创建 Google Cloud 项目。
- 如果您在客户端中使用 JWT 向 API 发送经过身份验证的请求,则 JWT 必须位于 HTTP 请求的 Authorization 标头中。JWT 应具备以下必要的声明:
-
iss
-
sub
-
aud
-
iat
-
exp
-
使用 Firebase 身份验证进行身份验证
要支持使用 Firebase 身份验证的客户端发起的调用,请执行以下操作:
将 App Engine Cloud Endpoints API 导入您的 API 类中:
import endpoints
将每个客户端的 Firebase issuer 对象添加到 API 修饰器。 例如:
@endpoints.api( name='YOUR_API_NAME', version='VERSION_NUMBER', issuers={'firebase': endpoints.Issuer( 'https://securetoken.google.com/YOUR_PROJECT_ID, 'https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com')})
- 将
YOUR_API_NAME
替换为您的 API 名称。 - 将
VERSION_NUMBER
替换为您的 API 版本,例如v1
。 - 将代码 >YOUR_PROJECT_ID 替换为客户端的 Google Cloud 项目 ID。
- 将
在需要检查身份验证是否正确的每种 API 方法中,检查是否存在有效的
User
,如果不存在,则引发error 401
,具体如以下方法定义示例中所示:user = endpoints.get_current_user() # If there's no user defined, the request was unauthenticated, so we # raise 401 Unauthorized.
部署 Endpoints API。每当添加新客户端时,您都需要重新部署 Endpoints API。
向客户端添加 Firebase 身份验证
如 Firebase 文档所述,您可以向代码中添加 Firebase 身份验证。客户端必须具有与之关联的 Google Cloud 项目,并且项目 ID 必须列在 API 的 Firebase issuer 配置中。
使用 Auth0 进行身份验证
要支持使用 Auth0 的客户端发起的调用,请执行以下操作:
将 App Engine Endpoints API 导入您的 API 类中:
import endpoints
将每个客户端的 Auth0 issuer 对象添加到 API 修饰器。 例如:
@endpoints.api( name='YOUR_API_NAME', version='VERSION_NUMBER', issuers={'auth0': endpoints.Issuer( 'https://YOUR_ACCOUNT_NAME.auth0.com', 'https://YOUR_ACCOUNT_NAME.auth0.com/.well-known/jwks.json')})
- 将
YOUR_API_NAME
替换为您的 API 名称。 - 将
VERSION_NUMBER
替换为您的 API 版本,例如v1
。 - 将
YOUR_ACCOUNT_NAME
替换为用于客户端的 Auth0 账号名称。
- 将
在需要检查身份验证是否正确的每种 API 方法中,检查是否存在有效的
User
,如果不存在,则引发error 401
,具体如以下方法定义示例中所示:user = endpoints.get_current_user() # If there's no user defined, the request was unauthenticated, so we # raise 401 Unauthorized.
部署 API。每当添加新客户端时,您都需要重新部署 API。
向客户端添加 Auth0 身份验证
如 Auth0 文档所述,您可以向代码中添加 Auth0 身份验证。客户端必须列在 API 的 Auth0 issuer 配置中。
使用 Google ID 令牌进行身份验证
要支持使用 Google ID 令牌进行身份验证的客户端发起的调用,请执行以下操作:
获取每个客户端应用的 OAuth 2 客户端 ID。客户端应用所有者必须通过 Google Cloud 控制台生成客户端 ID。如需了解相关说明,请参阅创建客户端 ID。
将 App Engine Endpoints API 导入您的 API 类中:
import endpoints
在
allowed_client_ids
中指定要向其授予 API 访问权限的所有客户端 ID,同时在 API 修饰器的audiences
字段中指定属于 Android 客户端的客户端 ID。例如:@endpoints.api( name='YOUR_API_NAME', version='VERSION_NUMBER', allowed_client_ids=ALLOWED_CLIENT_IDS, audiences=[ANDROID_AUDIENCE]) class AuthedGreetingApi(remote.Service): # ...
将
ALLOWED_CLIENT_IDS
替换为每个客户端项目中生成的 OAuth 2 客户端 ID 列表,并将ANDROID_AUDIENCE
替换为 Android Web 客户端 ID 列表。Web 客户端 ID 是末尾附加了.apps.googleusercontent.com
的客户端 ID,例如YOUR_CLIENT_ID.apps.googleusercontent.com
。在需要检查身份验证是否正确的每种 API 方法中,检查是否存在有效的
User
,如果不存在,则引发error 401
,具体如以下方法定义示例中所示:user = endpoints.get_current_user() # If there's no user defined, the request was unauthenticated, so we # raise 401 Unauthorized.
部署 Endpoints API。每当添加新客户端时,您都需要重新部署 Endpoints API。
向客户端添加 Google ID 令牌身份验证
如需了解如何向客户端添加身份验证代码,请参阅以下内容:
后续步骤
如需了解用户身份验证及其与 API 密钥授权的不同之处的背景信息,请参阅何时及为何使用 API 密钥。