Ошибка: Несоответствие URI перенаправления при интеграции аутентификации Microsoft с Django

Я пытаюсь интегрировать аутентификацию Microsoft в мое приложение Django, развернутое на Azure Web App, используя пакет django_auth_adfs. Однако я столкнулся с ошибкой, связанной с несоответствием URI перенаправления.

Я следовал документации, предоставленной django_auth_adfs для настройки интеграции Azure Active Directory. На портале Azure я зарегистрировал приложение и добавил http://localhost:8000/oauth2/callback к URL-адресам Web Redirect, как указано в инструкции.

Веб-адреса перенаправления

При попытке аутентификации я получаю следующее сообщение об ошибке:

The redirect URI 'http://127.0.0.1:8000/oauth2/callback' specified in the request does not match the redirect URIs configured for the application. Make sure the redirect URI sent in the request matches one added to your application in the Azure portal.

Вот моя конфигурация settings.py, связанная с django_auth_adfs:

INSTALLED_APPS = [
    ...
    'django_auth_adfs',
]

MIDDLEWARE = [
    ...
    'django_auth_adfs.middleware.LoginRequiredMiddleware',
]

AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
    'django_auth_adfs.backend.AdfsAccessTokenBackend',
]

LOGIN_REDIRECT_URL = '/'
LOGIN_URL = 'django_auth_adfs:login' 
LOGOUT_REDIRECT_URL = '/'

# django-auth-adfs settings
AUTH_ADFS = {
    'AUDIENCE': config('MICROSOFT_AUTH_CLIENT_ID'),
    'CLIENT_ID': config('MICROSOFT_AUTH_CLIENT_ID'),
    'CLIENT_SECRET': config('MICROSOFT_AUTH_CLIENT_SECRET'),
    'CLAIM_MAPPING': {'first_name': 'given_name', 'last_name': 'family_name', 'email': 'upn'},
    'GROUPS_CLAIM': 'roles', # or None
    'MIRROR_GROUPS': True,
    'USERNAME_CLAIM': 'upn',
    'TENANT_ID': config('MICROSOFT_AUTH_TENANT_ID'),
    'RELYING_PARTY_ID': config('MICROSOFT_AUTH_CLIENT_ID'),
}
ADFS_REDIRECT_URI = 'http://localhost:8000/oauth2/callback'

Что может вызвать эту ошибку несоответствия URI перенаправления, несмотря на настройку правильного URI перенаправления на портале Azure? Есть ли что-то дополнительное, что мне нужно настроить или проверить в настройках Django или Azure, чтобы решить эту проблему?

Любые соображения или рекомендации по решению этой проблемы будут очень признательны. Спасибо!

Даже я столкнулся с таким же кодом ошибки, как и ваш, Для того чтобы решить проблему, обратитесь к следующим шагам.

Для запуска приложения я использовал приведенную ниже команду.

python manage.py runserver localhost:8000

Это помогло мне получить URL с localhost вместо следующего URL: http://127.0.0.1:8000.

Ниже приведен код Settings. py.

settings. py:

from pathlib import Path
import os
from dotenv import load_dotenv
load_dotenv()
BASE_DIR = Path(__file__).resolve().parent.paren
SECRET_KEY = 'django-insecure-pnoikqzon+<Key>'
DEBUG = True
ALLOWED_HOSTS = ['localhost','127.0.0.1']
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django_auth_adfs',
    'api',
    'django_extensions',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
     'django_auth_adfs.middleware.LoginRequiredMiddleware',
]

ROOT_URLCONF = 'djangoAd.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'djangoAd.wsgi.application'
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_TZ = True
STATIC_URL = 'static/'
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
AUTHENTICATION_BACKENDS = (
    'django_auth_adfs.backend.AdfsAuthCodeBackend',
)
LOGIN_URL = "django_auth_adfs:login"
LOGIN_REDIRECT_URL = "/"
client_id = os.getenv('client_id')
client_secret = os.getenv('client_secret')
tenant_id = os.getenv('tenant_id')
AUTH_ADFS = {
    'AUDIENCE': client_id,
    'CLIENT_ID': client_id,
    'CLIENT_SECRET': client_secret,
    'CLAIM_MAPPING': {'first_name': 'given_name',
                      'last_name': 'family_name',
                      'email': 'upn'},
    'GROUPS_CLAIM': 'roles',
    'MIRROR_GROUPS': True,
    'USERNAME_CLAIM': 'upn',
    'TENANT_ID': tenant_id,
    'RELYING_PARTY_ID': client_id,
}

После регистрации приложения я добавил http://localhost:8000/oauth2/callback в URL-адреса Web Redirect, как показано ниже.

enter image description here

Я добавил в конфигурацию токена необязательные утверждения, приведенные ниже.

enter image description here

После запуска приложения я получил следующее сообщение и выбрал свою учетную запись.

enter image description here

Я принял регистрацию приложения, как показано ниже.

enter image description here

Выход:

enter image description here

Вернуться на верх