0

Flask OAuth クライアントを使用して、Microsoft Azure を使用してホストされているサーバーに接続しようとしています。

認証コードを取得するには、response_type、client_id、state に加えて、本文のユーザー名とパスワードを authorize_url に POST する必要があります。次に、サーバーは応答で認証コードを返します。

これを機能させる方法についてのアイデアはありますか?

次の多くのバリエーションを試しましたが、ドキュメントを読んで、ユーザー名、パスワードを送信して認証サーバーからコードを取得する方法を特定できません。

# Python standard libraries
import os

# Third-party libraries
from flask import Flask, redirect, url_for, session, request, jsonify, render_template

from authlib.integrations.flask_client import OAuth

app = Flask(__name__)
app.debug = True
app.secret_key = os.environ.get("SECRET_KEY") or os.urandom(24)

def ers_compliance_fix(session):

    def _fix(url, headers, data):
        headers = {
            'Ocp-Apim-Subscription-Key': os.environ.get('SUBSCRIPTION_KEY'),
            'Content-Type': 'application/json'
        }
        return url, headers, data

    session.register_compliance_hook('protected_request', _fix)

oauth = OAuth(app)
ers = oauth.register('ers',
               api_base_url='https://xxxxx.com',
               access_token_url='https://xxxxx.com/authtoken/Token.php',
               refresh_token_url='https://xxxxx.com/refreshtoken/Token.php',
               authorize_url='https://xxxxx.com/auth/Authorize.php',
               compliance_fix=ers_compliance_fix,
               client_kwargs=None,
               client_id=os.environ.get('CLIENT_ID'),
               client_secret=os.environ.get('CLIENT_SECRET'),
              )

# Get an Access Token (Authorization Code Grant Type)
#
# Get Authorization Code
# POST https://xxxxx.com/auth/Authorize.php
# Header
# { 
#       Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
#       Content-Type: application/json
# }
# Body
# {
#       "response_type": "code",
#       "client_id": "YOUR_CLIENT_ID",
#       "username": "ACCOUNT_USERNAME"
#       "password": "ACCOUNT_PASSWORD"
#       "state": "xyz"
# }
# RESPONSE
# "https:\/\/xxxxx.com?code=YOUR_AUTHORIZATION_CODE&state=xyz"

# Exchange Authorization Code for an Access Token
# POST https://xxxxx.com/authtoken/Token.php
# Header
# { 
#       Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
#       Content-Type: application/json
# }
# Body
# {
#       "grant_type": "authorization_code",
#       "code": YOUR_AUTHORIZATION_CODE,
#       "client_id": "YOUR_CLIENT_ID",
#       "client_secret": "YOUR_CLIENT_SECRET",
#       "redirect_uri": "YOUR_REDIRECT_URI"
# }
# RESPONSE
# {
#       "access_token": "YOUR_ACCESS_TOKEN",
#       "expires_in": 3600,
#       "token_type": "Bearer",
#       "scope": null,
#       "refresh_token": "YOUR_REFRESH_TOKEN"
# }

@app.route('/')
def index():
        resp = ers.authorize_redirect(None, username=os.environ.get('USER_ID'), password=os.environ.get('PASSWORD'))
        token = ers.authorize_access_token()
        print(token)

if __name__ == '__main__':
    app.run(ssl_context='adhoc', host='0.0.0.0', port=8080, debug=True)
4

0 に答える 0