【问题标题】:Python/WebApp Google App Engine - testing for user/pass in the headersPython/WebApp Google App Engine - 测试用户/通过标头
【发布时间】:2010-12-02 18:12:31
【问题描述】:

当您像这样调用网络服务时:

   username = 'test12'
   password = 'test34' 
   client = httplib2.Http(".cache") 
   client.add_credentials(username,password)
   URL = "http://localhost:8080/wyWebServiceTest"
   response, content = client.request(URL) 

如何将用户名/密码放入服务器端的变量中(即在我正在编写的 Web 服务中)。 我检查了 self.request.headers 和 self.request.environ 并找不到它们。

(我没有使用 Google 登录,需要针对我自己的数据库退回此用户 ID/通行证以验证安全性。)

我试图从这个页面获得想法:http://pythonpaste.org/webob/reference.html#headers

谢谢,

尼尔·沃尔特斯

对以下 Peter 的代码稍作改进:

 auth = None 
 if 'Authorization' in self.request.headers: 
    auth = self.request.headers['Authorization']
 if not auth:

【问题讨论】:

    标签: python google-app-engine web-applications


    【解决方案1】:

    我没有测试过这段代码(插入笑脸),但我认为这是你需要的东西。基本上,如果您的服务器没有将 401 退回给您的客户端(客户端需要知道领域才能知道要提供哪些凭据),您的凭据将不会出现在标题中。

    class MYREALM_securepage(webapp.RequestHandler):
      def get(self):
          if not 'Authorization' in self.request.headers:
              self.response.headers['WWW-Authenticate'] = 'Basic realm="MYREALM"'
              self.response.set_status(401)
              self.response.out.write("Authorization required")
          else:
              auth = self.request.headers['Authorization']
              (username, password) = base64.b64decode(auth.split(' ')[1]).split(':')
              # Check the username and password, and proceed ...
    

    【讨论】:

    • 完全符合医生的要求!谢谢!!!我添加了“import base64”并做了一个小改动 - 请参阅我的原始帖子的编辑。
    • 一个吹毛求疵:作为装饰器会更好。 :)
    • 它应该完全作为一个装饰器来完成。我只是想展示核心代码。
    【解决方案2】:

    凭据将出现在授权标头中。步骤如下:

    1. 客户端向您的应用发出请求,但未尝试授权
    2. 服务器响应“401 Authorization Required”响应,并且“WWW-Authenticate”标头设置为“Basic realm="something"”(用于基本身份验证)。
    3. 客户端使用适当设置的授权标头进行响应(见下文)。

    步骤 3 中客户端 Authorization 标头的确切内容取决于所使用的授权方法。对于 HTTP 基本身份验证,它是 base64 编码的用户凭据 - 请参阅 here。对于 HTTP 摘要身份验证,服务器的标头和来自客户端的响应都比较复杂 - 请参阅 here

    【讨论】:

    • 感谢您的回复,尤其是解释编码的链接。
    • 装饰器的好主意 - 但它在我头上没有停下来花一天时间。这是我的粗略尝试:stackoverflow.com/questions/1500982/…
    【解决方案3】:

    httplib2 只会在来自 web 服务器的 401 响应之后传递凭据,之后凭据应该在 Authorization: 标头中发送。

    【讨论】:

    • 我很困惑。所以你是说第一次调用没有凭据,然后服务器返回 401,然后客户端自动发送用户/密码?但无论如何 - 用户/通行证可用于网络服务,对吗?上面的代码片段是在我的机器上运行的一个非 GAE 程序,它调用 GAE Web 服务。它在我想检查用户/通行证的网络服务中。 (很高兴看到你的照片 - 我一直看到你 Google-Group)。
    • 在其他答案之后得到它。谢谢。
    猜你喜欢
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 2016-12-29
    • 2014-03-12
    • 1970-01-01
    相关资源
    最近更新 更多