Python Azure AD B2C的mozilla django oidc问题

Python Azure AD B2C的mozilla django oidc问题,python,django,django-forms,django-openid-auth,python-openid,Python,Django,Django Forms,Django Openid Auth,Python Openid,我试图在django中配置“mozilla django oidc”包。为了进行身份验证,我使用Azure Active Directory B2C策略,因此这是我的联合服务器 当我点击登录按钮时,我得到了这个URL,它看起来不对,我将拆分它,只是为了方便: 我需要的URL具有以下格式: 在主页中,我有以下代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">

我试图在django中配置“mozilla django oidc”包。为了进行身份验证,我使用Azure Active Directory B2C策略,因此这是我的联合服务器

当我点击登录按钮时,我得到了这个URL,它看起来不对,我将拆分它,只是为了方便:

我需要的URL具有以下格式:

在主页中,我有以下代码:

<!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>

主页
欢迎来到主页
{%if user.u经过身份验证%}
当前用户:{{user.email}

{%else%} {%endif%}

我在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\u RP\u SIGN\u ALGO=“RS256”
OIDC_RP_CLIENT_ID=“XXXXXXXXXXXXX”#仅针对此帖子伪造客户ID
#OIDC\u RP\u CLIENT\u SECRET=os.environ['OIDC\u RP\u CLIENT\u SECRET']
OIDC\u操作\u授权\u端点=
"https://TENANTID.b2clogin.com/TENANTID.onmicrosoft.com/oauth2/v2.0/authorize? 
p=b2c_1_租户_签名”
OIDC_OP_令牌_端点=”https://TENANTID.b2clogin.com/TENANTID.onmicrosoft.com/oauth2/v2.0/token? 
p=b2c_1_租户_签名”
#OIDC_OP_USER_ENDPOINT=“”
登录\u重定向\u URL=”http://localhost:8000/oidc/callback/"
注销\u重定向\u URL=”http://localhost:8000/welcome/
注: 我不知道在这个变量“OIDC\u RP\u CLIENT\u SECRET”和“OIDC\u OP\u USER\u ENDPOINT”中放什么

请提供任何帮助以获取此配置中的正确URL?
谢谢

我必须从库中更新views.py文件才能获得所需的URL。
文档非常糟糕,但至少它可以正常工作。

为了获得所需的URL,您需要删除端点中的授权参数:

  • OIDC\u OP\u授权\u端点
  • OIDC\u OP\u令牌\u端点
这将为您产生新的端点,如下所示

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”授权参数添加回URL:

OIDC_AUTH_REQUEST_EXTRA_PARAMS = {'p': 'b2c_1_TENANTID_signin'}
OIDC_RP_SCOPES = ['openid']
您是否可以使用
OIDC\u use\u NONCE=False
而不是将
NONCE
设置为
defaultNonce


编辑:我应该提到,这并不能解决您关于
响应类型
当前时间
的问题,您必须添加什么才能使其正常工作?在库的views.py文件中,我更改了此行后的OIDC参数:if self.get\u设置('OIDC\u USE\u nonce',True):。因此,我更改了配置的json如下:nonce=“defaultNonce”params.update({'nonce':nonce,'response_type':'id_token','scope':'openid','prompt':'login',})。然后更改重定向url,删除“?”:redirect_url='{url}&{query}.format(url=self.OIDC_OP_AUTH_ENDPOINT,query=query)谢谢!我最终设置了一个自定义DRF后端,并通过PyJWT成功验证了访问令牌。