私はPythonでいくつかのREST APIを書こうとしていますが、まずAuthenticate codeを書き始めました。 、私はを通じてこのURLを呼び出すようにしようとしています今安全なPython REST API
@app.route('/student/<studentid>', methods = ['GET'])
@requires_auth
def api_users(studentid):
students = {'1':'ABC', '2':'XYZ', '3':'TEST'}
if studentid in students:
return jsonify({studentid:students[studentid]})
else:
return not_found()
:私は私のサンプルアプリケーションを確保するために上記のコード部分を使用している
from functools import wraps
from flask import request, Response
def check_auth(username, password):
"""This function is called to check if a username/
password combination is valid.
"""
return username == 'admin' and password == 'secret'
def authenticate():
"""Sends a 401 response that enables basic auth"""
return Response(
'Could not verify your access level for that URL.\n'
'You have to login with proper credentials', 401,
{'WWW-Authenticate': 'Basic realm="Login Required"'})
def requires_auth(f):
@wraps(f)
def decorated(*args, **kwargs):
auth = request.authorization
if not auth or not check_auth(username, password):
return authenticate()
return f(*args, **kwargs)
return decorated
:私は、サイトの1に認証のためのサンプルコードを見つけましたpythonリクエスト/ pycurlモジュール。しかし、毎回有効なユーザー名/パスワードに関係なく401エラーを返します。
使用して要求:カールを使用して
import requests, base64
usrPass = "admin:secret"
b64Val = base64.b64encode(usrPass)
from requests.auth import HTTPBasicAuth
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
res = requests.get('https://<abc.com>/student/1', auth=HTTPBasicAuth('admin','secret'), headers={'Authorization': 'Basic %s' % b64Val}, data={}, verify=False)
print res
:毎回それが401エラーを返す理由
myCurlPut = pycurl.Curl()
myCurlPut.setopt(pycurl.URL, "https://<abc.com>/student/1")
myCurlPut.setopt(pycurl.HTTPAUTH, pycurl.HTTPAUTH_BASIC)
myCurlPut.setopt(pycurl.USERPWD, "%s:%s" % ('admin', 'secret'))
myCurlPut.setopt(pycurl.SSL_VERIFYPEER, 0)
myCurlPut.setopt(pycurl.HTTPHEADER, ['X-HTTP-Method-Override: GET'])
myCurlPut.perform()
は、誰も私を助けてください。提案してください。
デバッグ出力を@ requires_auth @に入れようとしましたか?あなたがリクエストをしたときに 'request.authorization'の価値は何ですか? –
request.authorizationの値はNoneとなっています – user1138143