自定义edx身份验证后端和管道步骤

edx-auth-backends的Python项目详细描述


有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有权有href="http://codecov.io/github/edx"/验证后端?branch=master" rel="nofollow"> codecov

此包包含edx服务用于单点登录的自定义身份验证后端、视图和管道步骤。

此软件包与Python2.7和3.5以及Django 1.8到1.11兼容。

我们目前支持两种身份验证形式:

  • OAuth 2.0
  • openid connect(不推荐)

不支持openid connect(oidc)。客户端应该使用OAuth 2.0后端。此后端行为 与oidc后端类似,只是我们使用jwt作为访问令牌,而不是oidc的id令牌。这允许我们使用 任何OAuth提供程序,而不依赖于OIDC提供程序的实现。

安装

可以使用pip从pypi安装 auth_backends

$ pip install edx-auth-backends

更新已安装的应用程序

INSTALLED_APPS=('social_django',)

配置

向服务添加单点登录/退出支持需要做一些更改:

  1. 定义设置
  2. 添加身份验证后端
  3. 添加登录/注销重定向
  4. < > >

    OAuth 2.0设置

    <表> < COLGROUP > < COL/> < COL/> <广告> 设置 目的 < /广告> <正文> 社会认证密钥 客户端密钥 社交身份验证 客户机密 社交身份验证OAuth2终端 提供者根目录(例如 https://courses.stage.edx.org/oauth2 ) 社会认证密钥 (可选)使用HS512算法签名的JWT的共享密钥 社会认证服务提供商配置缓存ttl (可选)提供程序配置的缓存超时。默认为1周。 社交网络认证 (可选)提供程序JWKS密钥数据的缓存超时。默认为1天。 <表>

    注意,OAuth 2.0提供程序使用 social_auth_edx_oauth2_endpoint 从特殊路径读取配置, .知名/openid配置 (例如:https://courses.stage.edx.org/oauth2/.知名/openid配置rel="nofollow">https://courses.stage.edx.org/oauth2/.知名/openid配置)。这个 从这个端点返回的数据提供了身份验证所需的url以及用于 验证已签名的JWT(JWS)访问令牌。

    从auth backends 2.0.0开始,oauth2应用程序需要访问 用户id 作用域才能使 edxoauth2 后端工作。后端将把 用户id 写入Social Auth Extra_数据,并可以在用户模型中按如下方式访问:

    self.social_auth.first().extra_data[u'user_id']  # pylint: disable=no-member
    

    OIDC设置(不推荐)

    必须设置以下设置:

    <表> < COLGROUP > < COL/> < COL/> <广告> 设置 目的 < /广告> <正文> 社交授权键 OAuth/OpenID连接客户端密钥 社交身份验证 oauth/openid connect客户端机密 社会认证dc_id_token_decryption_密钥 身份令牌解密密钥(与edx openid connect的客户端密钥值相同) 社交网站 oauth/openid连接提供程序根目录(例如 https://courses.stage.edx.org/oauth2 ) 社会授权发行人 OAuth/OpenID连接提供程序ID令牌颁发者(例如 https://courses.stage.edx.org/oauth2 ) 社交网站 oauth/openid connect提供程序的注销页面url(例如,https://courses.stage.edx.org/logout" rel="nofollow">https://courses.stage.edx.org/logout) <表>

    如果应用程序需要标识令牌中的其他用户数据,则可以通过定义 额外范围设置。例如,如果您希望有一个名为"首选语言"的声明,您可以包括 您的设置如下:

    EXTRA_SCOPE=['preferred_language']

    假设标识提供程序知道如何处理该范围,则关联的声明数据将包含在 身份验证期间返回的标识令牌。请注意,这些作用域/声明依赖于标识提供程序 被使用。 edxopenidconnect 后端配置为所有现成的edx服务使用。

    课程权限声明中的可选设置 ,主要由 edx分析仪表板 ,可用于指定范围/声明 应请求以检索允许用户访问/管理的课程列表。这个的价值 数组取决于身份验证提供程序的可用作用域。

    策略

    我们使用一个自定义的策略,其中包括 使用EDX服务的单点登录所需的默认设置。所有人都应该使用这个策略 简化配置的服务。如果您需要覆盖默认值,您仍然可以使用 Social Auth设置--在设置名称前添加Social Auth。在django设置中添加以下内容以使用 策略:

    SOCIAL_AUTH_STRATEGY='auth_backends.strategies.EdxDjangoStrategy'

    身份验证后端

    配置后端只是更新 身份验证后端设置的问题。配置 以下内容已足够用于所有EDX服务。

    AUTHENTICATION_BACKENDS=('auth_backends.backends.EdXOpenIdConnect','django.contrib.auth.backends.ModelBackend',)

    验证视图

    为了使用身份验证后端,需要更新服务的登录/注销视图。登录名 应更新视图以重定向到身份验证提供程序的登录页。注销视图应更新为 重定向到身份验证提供商的注销页。

    这个包包括为oidc和oauth 2.0配置的视图和urlpatterns。要使用它们,只需在 在 urls.py 中, 对服务的urlpatterns进行auth\u urlpatterns oauth2 urlpatterns 验证

    fromauth_backends.urlsimportauth_urlpatternsurlpatterns=auth_urlpatterns+[url(r'^admin/',include(admin.site.urls)),...]

    建议不要修改登录视图。但是,如果需要修改注销视图(重定向到 例如,一个不同的url),您可以为 视图和 登录视图testmixin 用于您的测试。

devstack

当使用基于Docker的devstack时,必须同时拥有OAuth/OIDC的内部和公共URL 供应商.要满足此需要,请将 social-auth-edx-oidc-u-public-url-u-root设置设置为 提供商可通过浏览器访问的URL。

SOCIAL_AUTH_EDX_OIDC_URL_ROOT='http://edx.devstack.edxapp:18000/oauth2'SOCIAL_AUTH_EDX_OIDC_PUBLIC_URL_ROOT='http://localhost:18000/oauth2'

此外,注销URL还应可通过浏览器访问:

SOCIAL_AUTH_EDX_OIDC_LOGOUT_URL='http://localhost:18000/logout'
< / div>

测试

呼叫进行测试

许可证

除非另有说明,否则此存储库中的代码是根据AGPL授权的。

有关详细信息,请参见 license.txt

如何贡献

非常欢迎您的贡献!

有关详细信息,请阅读 如何贡献

尽管它是用edx平台编写的, 对于打开的EDX代码,一般应遵循指南。

报告安全问题

请不要公开报告安全问题。请通过电子邮件发送安全信息。

邮件列表和IRC频道

您可以在 edx代码google group 或 freenode上的irc频道。

历史记录

0.1.3(2015-03-31)

  • 将所需版本的python social auth更新到0.2.3。

0.1.2(2015-02-23)

  • 将所需版本的python social auth更新到0.2.2。

0.1.1(2015-02-20)

  • 初始版本。

renzo lucioni<; renzo @ edx 组织 >; Troy Sankey<; tsankey @ edx 组织 >;

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
javajaxb在嵌套节点中生成xmlns:xsi声明   java重定向到youtube以上传jsp上可用的视频   java提高了JVM和ANT的性能   java如何将返回的JSON数据放在HTML表单中   java如何发送XWWWFORMURLENCODE在重新授权   java为什么jvm XX:+EliminateAllocations失败   堆移除和重建方法?(爪哇)   Stanford NPL in Spark(Scala)应用程序运行到Java堆空间(Java.lang.OutOfMemoryError)   调试java中打开/关闭println的任何方式(详细模式)   java IntelliJ在鼠标悬停时显示JavaDocs工具提示   Olingo Odata Java中的自动扩展选项   json将postgres文本arry转换为java列表?   oop需要帮助推断Java代码   复选框的java添加操作侦听器AbstractTableModel   java如何从公共静态void main(String[]args)传递值   java从数据库中获取大值   java Processing 2.0电影从jar运行时无法打开电影文件   java如何在不使用应用程序的情况下刷新活动?   尝试将JSON解析为ListView时的Android:JSON parse:null对象引用