проблема mozilla-django-oidc с Azure AD B2C

Я пытаюсь настроить пакет "mozilla-django-oidc" в Django. Для аутентификации я использую политику Azure Active Directory B2C, так что это мой сервер федерации.

Когда я нажимаю кнопку входа в систему, я получаю этот URL-адрес, который мне кажется неправильным, я разделю его, просто для удобства:

https://TENANTID.b2clogin.com/TENANTID.onmicrosoft.com/oauth2/v2.0/authorize?p=b2c_1_TENANTID_signin?response_type=code&scope=openid+email&client_id=XXXXXXXXXXXXXXX2%A2%A2%8A03%A03A03_A03 2Fcallback% 2F & state = pt8aYXicnYRSQkkB8kwHSv4hQwt9Xzre & nonce = UfLfk6QovA2inpfo9W7zS2MZHLpO1tkJ

и нужный мне URL-адрес имеет следующий формат: https://TENANTID.b2clogin.com/TENANTID.onmicrosoft.com/oauth2/v2.0/authorize?p=B2C_1_TENANTID_SIGNIN&client_id=XXXXXXXXXXXXXX&nonce=defaultNonce%8%A3%3%3%A2%3%A3%3%3direct_host2 % 2Foidc% 2Fcallback% 2F & scope = openid & response_type = id_token & prompt = логин

На домашней странице у меня есть этот код:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Home page</title>
</head>
<body>
  <h3>
    Welcome to home page
  </h3>

 {% if user.is_authenticated %}
  <p>Current user: {{ user.email }}</p>
  <form action="{% url 'oidc_logout' %}" method="post">
    <input type="submit" value="logout">
  </form>
{% else %}
  <a href="{% url 'oidc_authentication_init' %}">Login</a>
{% endif %}

</body>

мой код в settings.py

OIDC_RP_SIGN_ALGO = "RS256"
OIDC_RP_CLIENT_ID = "xxxxxxxxxxxxxx" #fake client id just for this post
# OIDC_RP_CLIENT_SECRET = os.environ['OIDC_RP_CLIENT_SECRET']
OIDC_OP_AUTHORIZATION_ENDPOINT = 
"https://TENANTID.b2clogin.com/TENANTID.onmicrosoft.com/oauth2/v2.0/authorize? 
p=b2c_1_TENANTID_signin"
OIDC_OP_TOKEN_ENDPOINT = "https://TENANTID.b2clogin.com/TENANTID.onmicrosoft.com/oauth2/v2.0/token? 
p=b2c_1_TENANTID_signin"
# OIDC_OP_USER_ENDPOINT = "<URL of the OIDC OP userinfo endpoint>"
LOGIN_REDIRECT_URL = "http://localhost:8000/oidc/callback/"
LOGOUT_REDIRECT_URL = "http://localhost:8000/welcome/

Примечание: я не знаю, что поместить в эту переменную "OIDC_RP_CLIENT_SECRET", а также "OIDC_OP_USER_ENDPOINT"

Любая помощь, пожалуйста, получить правильный URL-адрес в этой конфигурации? Спасибо

2 ответа

Решение

Мне пришлось обновить файл views.py из библиотеки, чтобы получить нужный мне URL. Документация была очень плохой, но, по крайней мере, она работала.

Чтобы получить нужный URL, вам необходимо удалить параметр авторизации в ваших конечных точках:

  • OIDC_OP_AUTHORIZATION_ENDPOINT
  • OIDC_OP_TOKEN_ENDPOINT

Это даст вам новые конечные точки следующим образом.

OIDC_OP_AUTHORIZATION_ENDPOINT = "https://TENANTID.b2clogin.com/TENANTID.onmicrosoft.com/oauth2/v2.0/authorize"
OIDC_OP_TOKEN_ENDPOINT = "https://TENANTID.b2clogin.com/TENANTID.onmicrosoft.com/oauth2/v2.0/token"

Теперь вам не хватает части URL-адреса, поэтому вы можете снова добавить параметр авторизации policy с помощью следующего фрагмента кода:

OIDC_AUTH_REQUEST_EXTRA_PARAMS = {'p': 'b2c_1_TENANTID_signin'}
OIDC_RP_SCOPES = ['openid']

Не могли бы вы использовать OIDC_USE_NONCE = False вместо установки nonce быть defaultNonce?

РЕДАКТИРОВАТЬ: я должен был упомянуть, что это не решает вашу проблему вокруг response_type а также nonce.

Другие вопросы по тегам