django - 使用 azuread-oauth2 时,exchange_access_token 上的 openEdx 服务器错误

标签 django azure openedx

我现在正在部署 openEdx 系统,但在从移动设备通过 Azure AD 登录时遇到错误。

Web Azure AD 登录工作正常,我还可以从 azure ad 获取 access_token。

但是,当我尝试通过/oauth2/exchange_access_token/azuread-oauth2/url 与 openEdx token 交换 azure token 时,由于响应为空,我收到以下错误。

AttributeError:“NoneType”对象没有属性“get”

因此,我对 openEdx 相当陌生,我很难弄清楚如何解决这个问题。请帮助指导我找到解决此问题的正确路径。以下是详细的错误日志。

提前致谢

Apr  1 12:38:45 edxapp [service_variant=lms][django.request][env:sandbox] ERROR [edxapp  24509] [exception.py:135] - Internal Server Error: /oauth2/exchange_access_token/azuread-oauth2/
Traceback (most recent call last):
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 249, in _legacy_get_response
    response = self._get_response(request)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/utils/decorators.py", line 185, in inner
    return func(*args, **kwargs)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
    return view_func(*args, **kwargs)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/views/generic/base.py", line 68, in view
    return self.dispatch(request, *args, **kwargs)
  File "/edx/app/edxapp/edx-platform/openedx/core/djangoapps/oauth_dispatch/views.py", line 57, in dispatch
    return view(request, *args, **kwargs)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
    return view_func(*args, **kwargs)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/views/generic/base.py", line 68, in view
    return self.dispatch(request, *args, **kwargs)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/utils/decorators.py", line 67, in _wrapper
    return bound_func(*args, **kwargs)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
    return view_func(*args, **kwargs)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/utils/decorators.py", line 63, in bound_func
    return func.__get__(self, type(self))(*args2, **kwargs2)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/utils/decorators.py", line 67, in _wrapper
    return bound_func(*args, **kwargs)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/social_django/utils.py", line 49, in wrapper
    return func(request, backend, *args, **kwargs)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/utils/decorators.py", line 63, in bound_func
    return func.__get__(self, type(self))(*args2, **kwargs2)
  File "/edx/app/edxapp/edx-platform/openedx/core/djangoapps/auth_exchange/views.py", line 44, in dispatch
    return super(AccessTokenExchangeBase, self).dispatch(*args, **kwargs)
   File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/rest_framework/views.py", line 489, in dispatch
    response = self.handle_exception(exc)
 File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/rest_framework/views.py", line 449, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/rest_framework/views.py", line 486, in dispatch
    response = handler(request, *args, **kwargs)
  File "/edx/app/edxapp/edx-platform/openedx/core/djangoapps/auth_exchange/views.py", line 57, in post
    if not form.is_valid():
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/forms/forms.py", line 183, in is_valid
    return self.is_bound and not self.errors
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/forms/forms.py", line 175, in errors
    self.full_clean()
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/forms/forms.py", line 385, in full_clean
    self._clean_form()
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/provider/forms.py", line 63, in _clean_form
    super(OAuthForm, self)._clean_form()
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/forms/forms.py", line 412, in _clean_form
    cleaned_data = self.clean()
  File "/edx/app/edxapp/edx-platform/openedx/core/djangoapps/auth_exchange/forms.py", line 95, in clean
    user = backend.do_auth(access_token, allow_inactive_user=True)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/social_core/utils.py", line 252, in wrapper
    return func(*args, **kwargs)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/social_core/backends/oauth.py", line 410, in do_auth
    data = self.user_data(access_token, *args, **kwargs)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/social_core/backends/azuread.py", line 80, in user_data
    id_token = response.get('id_token')
AttributeError: 'NoneType' object has no attribute 'get'

最佳答案

social-core 抛出错误,因为响应是 NoneType。由于您的目标是第三方 oAuth2,因此 social-core 在这里负责是有道理的。 如果它在网络上工作,那么只有当配置错误时,None 响应才可以解释。

现在,排除故障的步骤:

  1. 检查 edx.properties 以确保配置目录设置正确。
  2. 检查您的 configlocal yaml 以确保 oauth 配置正确。 [而不是简单地配置 ios.yaml]
  3. 确保您遵循提供的附加说明 here .
  4. 如果其他方法都不起作用,请检查 social-auth 的配置,如所述 here .

希望有帮助!干杯!

关于django - 使用 azuread-oauth2 时,exchange_access_token 上的 openEdx 服务器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55461097/

相关文章:

ruby - 正确拉动 edxops/论坛的方式

json - 类型错误 : <object> is not JSON serializable

azure - Azure 上的 ASP.NET Multi-Tenancy 应用程序 - 处理身份验证和与单独租户数据库的连接

azure - 应用程序网关 ARM 模板 - 启用防火墙的参数

node.js - 使用 InteractiveLogin 方法检索 ms-rest-azure 身份验证代码

edx - 如何在Open edX Platform中修改激活邮件内容?

django - 安全呈现用户提供的 django 模板

python - 从外部脚本导入 Django 设置

python - 我应该如何在 Django 中按类别组织项目列表?

docker - Openedx devstack安装