当前位置: 首页 > 知识库问答 >
问题:

如何对Google Cloudendpoint进行经过身份验证的调用?

充培
2023-03-14
Client ID is not allowed: <my client id>.apps.googleusercontent.com (/base/data/home/apps/m~bfg-data-analytics/20190106t144214.415219868228932029/lib/endpoints/users_id_token.py:508)
    null

有什么办法解决这个问题吗?

共有1个答案

太叔坚
2023-03-14
import endpoints
from endpoints import message_types
from endpoints import messages
from endpoints import remote

class EchoRequest(messages.Message):
    message = messages.StringField(1)

class EchoResponse(messages.Message):
    """A proto Message that contains a simple string field."""
    message = messages.StringField(1)


ECHO_RESOURCE = endpoints.ResourceContainer(
    EchoRequest,
    n=messages.IntegerField(2, default=1))

@endpoints.api(
    name='echo',
    version='v1',
    issuers={'serviceAccount': endpoints.Issuer(
    'MY-PROJECT@appspot.gserviceaccount.com',
    'https://www.googleapis.com/robot/v1/metadata/x509/MY-PROJECT@appspot.gserviceaccount.com')},
    audiences={'serviceAccount': ['MY-PROJECT@appspot.gserviceaccount.com']})

class EchoApi(remote.Service):
    # Authenticated POST API
    # curl -H "Authorization: Bearer $token --request POST --header "Content-Type: applicationjson" --data '{"message":"echo"}' https://MY-PROJECT@appspot.com/_ah/api/echo/v1/echo?n=5
    @endpoints.method(
        # This method takes a ResourceContainer defined above.
        ECHO_RESOURCE,
        # This method returns an Echo message.
        EchoResponse,
        path='echo',
        http_method='POST',
        name='echo')
    def echo(self, request):
        print "getting current user"
        user = endpoints.get_current_user()
        print user
        # if user == none return 401 unauthorized
        if not user:
            raise endpoints.UnauthorizedException

        # Create an output message including the user's email
        output_message = ' '.join([request.message] * request.n) + ' ' + user.email()
        return EchoResponse(message=output_message)

api = endpoints.api_server([EchoApi])
    import base64
    import json
    import time
    import google

    import google.auth
    from google.auth import jwt

    def generate_token(audience, json_keyfile, client_id, service_account_email):
        signer = google.auth.crypt.RSASigner.from_service_account_file(json_keyfile)

        now = int(time.time())
        expires = now + 3600  # One hour in seconds

        payload = {
            'iat': now,
            'exp': expires,
            'aud' : audience,
            'iss': service_account_email,
            'sub': client_id,
            'email' : service_account_email
        }

        jwt = google.auth.jwt.encode(signer, payload)

        return jwt

token = generate_token(
    audience="MY-PROJECT@appspot.gserviceaccount.com",              # must match x-google-audiences
    json_keyfile="./key-file-for-service-account.json",
    client_id="xxxxxxxxxxxxxxxxxxxxx",                              # client_id from key file
    service_account_email="MY-PROJECT@appspot.gserviceaccount.com")

print token
export token=`python main.py` 
curl -H "Authorization: Bearer $token" --request POST --header "Content-Type: application/json" --data '{"message":"secure"}' https://MY-PROJECT.appspot.com/_ah/api/echo/v1/echo?n=5
 类似资料:
  • 在我配置了下面的配置之后,它不会连接到Active Directory。我无法使用Active Directory的帐户登录。会有什么问题? 我有一个Ubuntu服务器18.04,带有ApacheGuacamoleV1。0.0. 安装。我想使用LDAP身份验证来验证用户。我已经下载了鳄梨酱-auth-ldap-1.0.0。jar和jldap-4.3。jar扩展。 10.10.10.21,10.10

  • 我是Spring安全的新手,我想用数据库验证用户。我已经用jdbc创建了一个登录页面和一个身份验证提供程序,它检查用户是否存在于数据库中。但是我的代码没有这样做的问题是,它允许所有用户登录!我的代码怎么了?谢谢你的帮助。 这是我的安全会议。xml:

  • 目前用户名总是匿名的。设置调用方主体的正确方法是什么?我在拦截器里做这个吗?还是在豆子本身?我的目标是基本上能够调用一个方法loginUserWithEJBOnJboss(String user,String pass),该方法使用在jboss中配置的登录方法并正确设置主体。 我在这里不知所措,谷歌什么也没找到。也许我只是在寻找错误的单词。

  • 问题内容: 我有一个有效的概念验证应用程序,可以通过测试服务器上的LDAP通过Active Directory进行成功的身份验证,但是生产应用程序必须通过TLS进行身份验证-域控制器会关闭所有未通过TLS发起的连接。 我已经在Eclipse中安装了LDAP浏览器,并且确实可以在 其中 使用TLS进行绑定,但是我一生都无法弄清楚如何让我的应用程序使用TLS。 ldap.xml : 是重写类,它扩展了

  • 我有一个工作的概念验证应用程序,它可以通过测试服务器上的LDAP成功地对Active Directory进行身份验证,但是生产应用程序必须通过TLS进行身份验证--域控制器关闭任何不通过TLS发起的连接。 ldap.xml: 是一个重写类,它扩展了Spring的类的副本,该类出于某种原因被指定为。我要重写的原因与自定义在用户对象上填充权限/权限的方式有关(我们要么使用相关组的组成员身份来构建用户的

  • 当我通过登录路径中定义的登录表单登录时,我的防火墙配置工作正常。我想要的是登录时不查看或进入登录路径,而是直接发送用户名和密码参数来检查路径。 当我用用户名和密码向check_路径发出post请求时,symfony2似乎需要一个cookie,它是由smyfony2自己在login_路径中创建的。 有没有办法通过发送用户名和密码直接检查路径来登录?