Adal для Flask WebApp Azure не будет работать - PullRequest
0 голосов
/ 06 сентября 2018

Я сейчас нахожусь в тупике, пытаясь получить аутентификацию пользователя Azure Active Directory для моего веб-приложения Flask. До того, как попробовать что-либо из аутентификации пользователя, это работало, но теперь я следовал всем примерам, которые мог найти, и я не знаю, что я делаю неправильно. Может быть, я иду по неверному пути полностью, но я мог бы использовать некоторую обратную связь, если кто-то может сказать, что я делаю неправильно. Он не будет работать ни на локальном хосте, ни на самом сайте. На веб-сайте я просто получаю сообщение об ошибке 500, истекло время ожидания запроса. На локальном хосте он получит запрос на вход в систему, но затем вернет ошибку.

Я следовал этой документации шаг за шагом:

https://github.com/Azure-Samples/active-directory-python-webapp-graphapi

Я зарегистрировал свое веб-приложение в Azure Active Directory и установил для URI идентификатора приложения значение:

https://{company_domain.com}/{appname}

URL домашней страницы:

https://{appname}.azurewebsites.net

Ответьте на URL:

https://{appname}.azurewebsites.net

Требуемые разрешения для разрешения делегированных разрешений на «Вход и чтение профиля пользователя»

В своем коде я создал файл config.py, который выглядит следующим образом:

RESOURCE = "https://{app_name}.azurewebsites.net"
TENANT = "{company_domain_name.com}"
AUTHORITY_HOST_URL = "https://login.microsoftonline.com"
CLIENT_ID = "{client_id}"  # copy the Application ID of your app from your Azure portal
CLIENT_SECRET = "{client_secret_key}"  # copy the value of key you generated when setting up the application

Тогда в моем файле init .py у меня есть следующий код:

from flask import Flask, render_template, Response, session, request, url_for, redirect
import adal
import config
import requests
import uuid

AUTHORITY_URL = config.AUTHORITY_HOST_URL + '/' + config.TENANT
REDIRECT_URI = 'https://{appname}.azurewebsites.net/getAtoken'
TEMPLATE_AUTHZ_URL = ('https://login.microsoftonline.com/{}/oauth2/authorize?' +
                      'response_type=code&client_id={}&redirect_uri={}&' +
                      'state={}&resource={}')
@app.route("/")
def main():
    login_url = 'http://<app_name>.azurewebsites.net/login'
    resp = Response(status=307)
    resp.headers['location'] = login_url
    return resp

@app.route("/login")
def login():
    auth_state = str(uuid.uuid4())
    session['state'] = auth_state
    authorization_url = TEMPLATE_AUTHZ_URL.format(
        config.TENANT,
        config.CLIENT_ID,
        REDIRECT_URI,
        auth_state,
        config.RESOURCE)
    resp = Response(status=307)
    resp.headers['location'] = authorization_url
    return resp

@app.route("/getAToken")
def main_logic():
    code = request.args['code']
    state = request.args['state']
    if state != session['state']:
        raise ValueError("State does not match")
    auth_context = adal.AuthenticationContext(AUTHORITY_URL)
    token_response = auth_context.acquire_token_with_authorization_code(code, REDIRECT_URI, config.RESOURCE,
                                                                        config.CLIENT_ID, config.CLIENT_SECRET)
    Flask.session['access_token'] = token_response['accessToken']

    return Flask.redirect('/index')

@app.route('/index')
def index():
    if 'access_token' not in session:
        return redirect(url_for('login'))
    endpoint = config.RESOURCE + '/' + config.API_VERSION + '/me/'
    http_headers = {'Authorization': session.get('access_token'),
                    'User-Agent': 'adal-python-sample',
                    'Accept': 'application/json',
                    'Content-Type': 'application/json',
                    'client-request-id': str(uuid.uuid4())}
    return render_template('index.html')

1 Ответ

0 голосов
/ 07 сентября 2018

На локальном хосте он получит запрос на вход в систему, но затем вернет ошибку.

Указывает, что URL-адрес ответа не совпадает. Вы можете добавить URL-адрес ответа (http://localhost:5000/getAToken) для зарегистрированного веб-приложения Azure AD. Если вы хотите запустить его на локальной и Azure платформе, вы можете добавить оба из них в URL-адресах ответа.

enter image description here

Проверьте это локально

enter image description here

На веб-сайте я просто получаю сообщение об ошибке 500, истекло время ожидания запроса

Похоже, что веб-приложение разработано неправильно. Дополнительные сведения о настройке среды Python в службе приложений Azure см. В этом руководстве .

.
...