【问题标题】:Python implementation of SAML2 protocol for app engine on Google cloud platform谷歌云平台应用引擎SAML2协议的Python实现
【发布时间】:2016-11-17 14:32:55
【问题描述】:

我在谷歌云平台上尝试了 pysaml2 和 python-saml 库,但两者都在内部使用一些库,这些库在 C 库上使用 C 扩展或 python 包装器,这与应用引擎不兼容,因为应用引擎在其生态中阻止了 c 实现的库系统。 有人用python在appengine中实现了saml2协议吗?

pysaml2 文档表明它是一个纯 python 实现,但它也使用需要 _ctype 库的库,如 pycrytodome 或 cryptodome。

以下是错误:

File "/home/***/anaconda2/lib/python2.7/ctypes/_init_.py", line 10, in <module> 
  from _ctypes import Union, Structure, Array  
File "/home/***/sdks/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/python/sandbox.py", line 963, in load_module 
  raise ImportError('No module named %s' % fullname)
ImportError: No module named _ctypes

如果可能,请提出其他一些方法。

【问题讨论】:

  • 一种可能性是 GAE 柔性环境,一些标准环境沙箱限制(包括“纯 python”)在 flex 环境中被解除。
  • 是的,你是对的,弹性环境有帮助,但不仅是弹性环境,还需要自定义运行时环境,我们需要从 ubuntu 或任何 linux 映像而不是 python 映像准备机器并安装所有使用 apt-get 的库。
  • 更新请在 dockerfile 中使用 FROM gcr.io/google_appengine/python-compat-multicore 而不是从 ubuntu 构建。
  • 你应该为你自己的问题写一个答案,描述一个可行的解决方案(听起来你有一个)。
  • @DanCornilescu 是否可以在灵活环境中运行一项服务而在标准环境中运行所有其他服务?因为我必须在我的 GAE 应用程序中实现 python-saml。

标签: python-2.7 google-app-engine ctypes saml-2.0


【解决方案1】:
I figured out what to do if you want to use c libraries in the app engine environment.
First of all you have to use app engine flexible environment instead of standard environment there also use the custom runtime. A sample yaml file is posted below.

app.yaml

runtime: custom  
env: flex  
api_version: 1

handlers:  
- url: /.*  
  script: main.app

The second thing which you need to do is choose a proper base image to build from and install the necessary libraries.

示例 dockerfile

FROM gcr.io/google_appengine/python-compat-multicore  
RUN apt-get update -y  
RUN apt-get install -y python-pip build-essential libssl-dev libffi-dev python-dev libxml2-dev libxslt1-dev xmlsec1

RUN apt-get install -y curl unzip  
RUN curl https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz > /tmp/google-cloud-sdk.tar.gz  
RUN mkdir -p /usr/local/gcloud  
RUN tar -C /usr/local/gcloud -xvf /tmp/google-cloud-sdk.tar.gz  
RUN /usr/local/gcloud/google-cloud-sdk/install.sh  

RUN curl https://storage.googleapis.com/appengine-sdks/featured/google_appengine_1.9.40.zip > /tmp/google_appengine_1.9.40.zip  
RUN unzip /tmp/google_appengine_1.9.40.zip -d /usr/local/gae

ENV PATH $PATH:/usr/local/gcloud/google-cloud-sdk/bin  
ENV PATH $PATH:/usr/local/gae/google_appengine/  
COPY . /app  
WORKDIR /app  

ENV MODULE_YAML_PATH app.yaml

RUN pip install -r requirements.txt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    相关资源
    最近更新 更多