对用户进行身份验证

本页面介绍如何使用 Cloud Endpoints Frameworks 在您的 API 中添加对于通过客户端应用进行用户身份验证的支持。请注意,目前支持 Android 和 JavaScript 客户端。

Endpoints Frameworks 支持通过使用以下任何方法的客户端应用对用户进行身份验证:

无论您使用哪种身份验证方法,在需要检查身份验证是否正确的每种 API 方法中,都必须检查是否存在有效的 User,具体如以下部分所述:

前提条件

本页面假定您已经完成以下操作:

  • 已创建 Google Cloud 项目

  • 添加 API 管理

  • 如果您在客户端中使用 JWT 向 API 发送经过身份验证的请求,则 JWT 必须位于 HTTP 请求的 Authorization 标头中。JWT 应具备以下必要的声明:

    • iss
    • sub
    • aud
    • iat
    • exp

使用 Firebase 身份验证进行身份验证

要支持使用 Firebase 身份验证的客户端发起的调用,请执行以下操作:

  1. 将 App Engine Cloud Endpoints API 导入您的 API 类中:

    import endpoints
    
  2. 将每个客户端的 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/VERSION_NUMBER/metadata/x509/securetoken@system.gserviceaccount.com')})
    
    • YOUR_API_NAME 替换为您的 API 名称。
    • VERSION_NUMBER 替换为您的 API 版本,例如 v1
    • 将代码 >YOUR_PROJECT_ID 替换为客户端的 Google Cloud 项目 ID。
  3. 在需要检查身份验证是否正确的每种 API 方法中,检查是否存在有效的 User,如果不存在,则引发 error 401,具体如以下方法定义示例中所示:

    user = endpoints.get_current_user()
    # If there's no user defined, the request was unauthenticated, so we
    # raise 401 Unauthorized.
    
  4. 部署 Endpoints API。每当添加新客户端时,您都需要重新部署 Endpoints API。

向客户端添加 Firebase 身份验证

Firebase 文档所述,您可以向代码中添加 Firebase 身份验证。客户端必须具有与之关联的 Google Cloud 项目,并且项目 ID 必须列在 API 的 Firebase issuer 配置中。

使用 Auth0 进行身份验证

要支持使用 Auth0 的客户端发起的调用,请执行以下操作:

  1. 将 App Engine Endpoints API 导入您的 API 类中:

    import endpoints
    
  2. 将每个客户端的 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 帐号名称。
  3. 在需要检查身份验证是否正确的每种 API 方法中,检查是否存在有效的 User,如果不存在,则引发 error 401,具体如以下方法定义示例中所示:

    user = endpoints.get_current_user()
    # If there's no user defined, the request was unauthenticated, so we
    # raise 401 Unauthorized.
    
  4. 部署 API。每当添加新客户端时,您都需要重新部署 API。

向客户端添加 Auth0 身份验证

Auth0 文档所述,您可以向代码中添加 Auth0 身份验证。客户端必须列在 API 的 Auth0 issuer 配置中。

使用 Google ID 令牌进行身份验证

要支持使用 Google ID 令牌进行身份验证的客户端发起的调用,请执行以下操作:

  1. 获取每个客户端应用的 OAuth 2 客户端 ID。客户端应用所有者必须通过 Google Cloud Console 生成客户端 ID。如需了解相关说明,请参阅创建客户端 ID

  2. 将 App Engine Endpoints API 导入您的 API 类中:

    import endpoints
    
  3. 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

  4. 在需要检查身份验证是否正确的每种 API 方法中,检查是否存在有效的 User,如果不存在,则引发 error 401,具体如以下方法定义示例中所示:

    user = endpoints.get_current_user()
    # If there's no user defined, the request was unauthenticated, so we
    # raise 401 Unauthorized.
    
  5. 部署 Endpoints API。每当添加新客户端时,您都需要重新部署 Endpoints API。

向客户端添加 Google ID 令牌身份验证

如需了解如何向客户端添加身份验证代码,请参阅以下内容:

后续步骤

如需了解用户身份验证及其与 API 密钥授权的不同之处的背景信息,请参阅何时及为何使用 API 密钥