如何跨内部 App Engine 模块验证请求?

2024-04-08

我在 Google App Engine 中有一个应用程序,包含 2 个模块(A and B). A处理用户请求并且无需身份验证即可使用。B是一个微服务,在以下情况下执行某些任务A需要它。所以我们有AB using urlfetch:

from google.appengine.api import urlfetch
from google.appengine.api import app_identity
rpc = urlfetch.create_rpc()
urlfetch.make_fetch_call(
    rpc,
    "https://b-dot-my-project.appspot.com/some/url",
    method='GET', 
    follow_redirects=False,
    headers = {
        'X-Appengine-Inbound-Appid': 'my-project', 
    },
)
response = rpc.get_result()

B's app.yaml看起来像:

runtime: python27
api_version: 1
threadsafe: yes
service: b

handlers:
- url: /.*
  script: my_module.app
  login: admin
  auth_fail_action: unauthorized

In the docs https://cloud.google.com/appengine/docs/python/issue-requests#issuing_a_request_to_another_app_engine_app,他们建议:

当向另一个 App Engine 应用程序发出请求时,您的 App Engine 应用程序 必须通过添加标头来声明其身份 X-Appengine-Inbound-Appid 到请求。如果您指示 URL 获取服务不遵循重定向,App Engine 将添加此标头 自动请求。

无论我做什么,我都会不断得到401当提出这个要求时。两个都A and B部署在同一个项目中。尝试设置follow_redirects=False并添加标题X-Appengine-Inbound-Appid手动(虽然我没想到它会因为描述的原因起作用here https://cloud.google.com/appengine/docs/python/appidentity/?csw=1#Asserting_Identity_to_Other_Systems#asserting_identity_to_other_app_engine_apps),仍然不确定是否设置了标头,因为日志B不包含请求标头,并且失败情况发生在我的处理程序模块执行之前。

如果可以的话我宁愿依靠A验证到B而不是仅仅放弃该选项login: admin并且仅依赖标头,因为能够调用会更好B来自项目管理员帐户(例如用于调试目的)。


而不是指定login: admin在您的配置中,使用 python 库代替:https://cloud.google.com/appengine/docs/standard/python/refdocs/google.appengine.api.users https://cloud.google.com/appengine/docs/standard/python/refdocs/google.appengine.api.users这样,您可以首先检查应用程序引擎标头,然后回退到管理员 google 用户。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何跨内部 App Engine 模块验证请求? 的相关文章

随机推荐

  • “Java Date() 返回 UTC 日期” - 它实际上是什么意思?

    我的问题可能很微不足道 但我只是想寻求澄清 我在 SO 中读到 Java 的 Date 实际上总是采用 UTC 时间 为什么当我创建 Date 对象并使用 toString 打印它时 它显示本地时间 如果这不是正确的打印方式 那么应该使用什
  • MySQL 中的乐观锁

    我在 MySQL 中找不到任何有关乐观锁定的详细信息 我读到 启动事务可以使两个实体的更新保持同步 但是 它不会阻止两个用户同时更新数据 从而导致冲突 显然乐观锁定可以解决这个问题 这在 MySQL 中是如何应用的 有相关的 SQL 语法
  • JTree 节点的可更改工具提示

    我有一个 JTree 其中填充了一些 自定义 节点 我有一个类 它是 DefaultTreeCellRenderer 的子类 使用 MyTreeCellRenderer 我可以为树中的每个节点设置工具提示 它工作正常 JTree 已填充 单
  • System.Data.IDbCommand 和异步执行?

    系统 Data SqlClient SqlCommand 有方法 BeginExecuteNonQuery BeginExecuteReader BeginExecuteXmlReader and EndExecuteNonQuery En
  • 如何配置本地 Jetty ssl 以避免弱 phermeral DH 密钥错误?

    我正在使用 keytool 生成密钥库来配置本地开发码头来运行 ssl keytool exe keystore jetty keystore alias jetty genkey keyalg RSA sigalg SHA256withR
  • 堆积条形图的悬停不起作用

    我正在检查 Flot 中的堆积图表 并在条形图中发现了一些奇怪的东西 我尝试使用这个 http jsfiddle net zNXBd 41 http jsfiddle net zNXBd 41 在此示例代码中 尝试将鼠标悬停在堆叠线上 悬停
  • AnyObject 尝试转换为 Equatable

    我有一个Equatable class class Item Equatable var value AnyObject var title String init title String value AnyObject self tit
  • 何时使用 IOC 容器?

    我试图了解何时应该使用容器而不是手动注入依赖项 如果我有一个使用 1 2 个接口的应用程序 并且每个接口只有 1 2 个具体实现 我会倾向于自己处理 如果我有一个使用 2 3 个接口的小型应用程序 并且每个接口有 2 3 个具体实现 我应该
  • 删除 woocommerce 完整或基于订单元处理电子邮件

    我正在尝试根据某些订单元删除处理 或完整 电子邮件 我正在使用 POS 系统并让客户通过客户发票电子邮件付款 初始订单状态为待付款 我想 a 测试是否使用 pos 下订单 b 删除 正在处理 或 完成 电子邮件 我似乎无法让 if 语句逻辑
  • 由于找不到资源“solrconfig.xml”而无法创建新的 Solr 核心

    我刚刚安装了 Solr 并想创建一个新的核心 但出现此错误 org apache solr common SolrException Error CREATEing SolrCore new core Unable to create co
  • “查找”或任何其他工具可以广度优先搜索文件吗?

    有时我知道某个文件并不那么深 但是非常密集的子目录不允许我轻松找到我想要的文件 Can find http www gnu org software findutils manual html mono find html 或任何其他工具
  • 编译器如何知道 C++ constexpr 计算不会触发未定义的行为?

    C 标准mandates编译器要检查未定义的行为 in C constexpr 计算 In 这次演讲 https www youtube com watch v yG1OZ69H o Chandler Carruth 指出 在检查 UB 时
  • 如何在 ruby​​ 中保留我的浮点数

    所以我正在尝试一些代码将数字转换为字符串 但是 我注意到在某些情况下它不会保留最后两位小数 例如 我输入 1 01 和 1 04 进行加法 然后得到 2 04 如果我只输入 1 05 它会保留该数字并准确返回 我明白发生了什么事情正在四舍五
  • SAML 签名证书 - 哪种 SSL 证书类型?

    我们目前正在使用 SAML 2 0 开发 SSL 解决方案 到目前为止 一直使用自签名证书来签署 XML 请求 但是 当我们转向生产时 我们希望使用来自证书颁发机构的证书 但我不太确定要购买什么类型的证书 因为它们都是以网站为中心的 例如单
  • QT:如何每秒循环一个方法? C++

    我创建了一个 Qt 项目 它在小部件上显示一个圆圈 然后我有一个方法 每次调用该方法时都会在不同位置重新绘制圆 我想要的是在 for 循环中运行该方法 比如说十次 并显示每秒重绘圆圈的 10 个位置 大致如下 void method pai
  • 在 Android 中添加地理围栏时出错(状态代码 1000)

    我收到错误onAddGeofencesResult int statusCode String geofenceRequestIds 回调与statusCode 1000 我启用了 GPS 和 WiFi 我还有 Google Play 服务
  • MasterPage .FindControl 在类中

    我尝试在从内容页面访问母版页时找到一个控件 确切地说是一个图像按钮 以下是母版页html代码
  • 使用 ggplot2 根据填充值重新排序堆叠条形图 x

    进行了包含 5 个问题的调查 这些问题有相同的可能答案 以下是数据 经过重新调整以使用 ggplot2 进行绘图 library tidyr library magrittr data lt data frame ID c 1 500 q1
  • R 和 Leaflet:如何跨多行排列标签文本

    假设您有以下数据框 cities data frame name c Madrid Barcelona Sevilla country c Spain Spain Spain region c Comunidad de Madrid Cat
  • 如何跨内部 App Engine 模块验证请求?

    我在 Google App Engine 中有一个应用程序 包含 2 个模块 A and B A处理用户请求并且无需身份验证即可使用 B是一个微服务 在以下情况下执行某些任务A需要它 所以我们有A向B using urlfetch from