Django中的自定义验证Django文档Django

Thewebframeworkforperfectionistswithdeadlines.

Django自带的身份验证已经足够满足大多数常见的情况,但你可能有一些需求没有被开箱即用的默认值所满足。在你的项目中定制身份验证需要了解所提供系统的哪些点是可扩展或可替换的。本文档详细介绍了如何定制认证系统。

有时候你需要连接到其他认证源——一个包含用户名及密码的源或者认证方法。

例如,你的公司可能已经有了一个LDAP配置,为每个员工存储了一个用户名和密码。如果用户在LDAP和基于Django的应用程序中分别有不同的账户,那么对于网络管理员和用户本身来说都是一件很麻烦的事情。

所以,为了处理这样的情况,Django认证系统让你可以插入其他认证源。你可以覆盖Django默认的基于数据库的方案,也可以将默认系统与其他系统串联使用。

注解

get_user方法接收一个user_id——可以是用户名、数据库ID或其他什么,但必须是用户对象的主键——然后返回一个用户对象或None。

authenticate方法采用request参数和证书作为关键字参数。大多数情况下,它看起来像这样:

fromdjango.contrib.auth.backendsimportBaseBackendclassMyBackend(BaseBackend):defauthenticate(self,request,username=None,password=None):#Checktheusername/passwordandreturnauser....但它也可以认证一个令牌,比如:

fromdjango.contrib.auth.backendsimportBaseBackendclassMyBackend(BaseBackend):defauthenticate(self,request,token=None):#Checkthetokenandreturnauser....无论哪种方式,authenticate()应该检查它所得到的凭证,如果凭证有效,则返回一个与这些凭证相匹配的用户对象。如果无效,则应返回None。

下面是一个后端实例,它可以根据settings.py文件中定义的用户名和密码变量进行验证,并在用户第一次验证时创建一个DjangoUser对象:

用户所拥有的权限将是所有验证后端返回的所有权限的一个超集。也就是说,如果任何后端之一将一个权限赋予了用户,那么Django最终也将该权限赋予这个用户。

后端可以像这样为管理员实现权限:

权限系统中对匿名用户的支持,可以实现匿名用户有权限做某事,而非激活的认证用户没有权限的场景。

不要忘记在自己的后端权限方法中测试用户的is_active属性。

这个Task模型创建了两个自定义权限,即用户可以或不可以对Task实例进行的操作,具体到你的应用程序:

如果你准备启动一个新的项目,强烈推荐你设置一个自定义的用户模型,即使默认的用户模型对你来说已经足够了。这个模型的行为与默认用户模型相通,但是你能在未来需要的时候自定义它:

同样的,在app中的admin.py中注册模型。

此外,当你运行迁移时,你可能会遇到一个CircularDependencyError,因为Django不会因为动态依赖而自动打破依赖循环。如果你看到这个错误,你应该通过将你的用户模型所依赖的模型移动到第二个迁移中来打破这个循环。(如果你想看看通常是怎么做的,你可以尝试做两个正常的模型,它们之间有一个ForeignKey,看看makemigrations是如何解决这个循环依赖的。)

如果你使用默认的认证后端,那么你的模型必须有一个可用于识别目的的唯一字段。这可以是一个用户名,一个电子邮件地址,或任何其他独特的属性。如果你使用可以支持的自定义认证后端,则允许使用非唯一的用户名字段。

描述用户模型上用作唯一标识符的字段名称的字符串。这通常是某种用户名,但也可以是电子邮件地址,或任何其他独特的标识符。该字段必须是唯一的(即在其定义中设置了unique=True),除非你使用的自定义认证后端可以支持非唯一的用户名。

接下来的样例中,identifier字段将被用作识别字段:

例如,这里是一个用户模型的部分定义,它定义了两个必填字段——出生日期和身高:

REQUIRED_FIELDS必须包含用户模型上的所有必填字段,但不应包含USERNAME_FIELD或password,因为这些字段总是会被提示。

导入AbstractBaseUser

返回USERNAME_FIELD指定的字段的值。

应用NFKCUnicode规范化用户名,使得不同Unicode码位视觉相同字符视为相同。

如果给定的原始字符串是用户的正确密码,返回True。(在进行比较时,这将处理密码散列。)

如果你的应用程序的身份验证是针对现有的外部源(如LDAP目录)进行的,你可能需要这个功能。

返回密码字段的HMAC。用于session-invalidation-onpassword-change。

哈希算法已更改为SHA-256。

create_user()的原型应该接受username字段,加上其他所有必须的字段作为参数。举例,如果你的用户模型使用email作为用户名字段,date_of_birth字段作为必填字段,那么create_user应该如下定义:

通过降低电子邮件地址的域部分来规范化电子邮件地址。

使用USERNAME_FIELD指定的字段的内容检索用户实例。

返回具有给定长度和给定字符串的随机密码。请注意,allowed_chars的默认值不包含可能导致用户混淆的字母,包括:

以下表单对用户模型进行了假设,如果满足这些假设,则可以按原样使用:

如果自定义的用户模型是AbstractUser的子类,则可以使用下面的方式来扩展表单:

如果允许用户有访问admin页面就返回True。

返回``True``,如果该用户的账号当前是激活状态

如果用户有指定的权限,则返回True。如果提供了参数obj,则需要对指定的对象实例进行权限检查。

如果用户有权限访问指定app里的模型,那么返回True。

如果正在使用自定义的ModelAdmin是django.contrib.auth.admin.UserAdmin的子类,那么你需要添加自定义字段到fieldsets(用于在编辑用户中使用)和add_fieldsets(用于在创建用户时使用)。比如

布尔值。指定该用户拥有所有权限,而不用一个个开启权限。

返回用户本身就自带的权限字符串集合。

如果传入了obj,则只返回指定对象的用户权限。

返回用户拥有权限的字符串集合,从用户所属组的权限中获取。

如果传入obj参数,则只返回指定对象所属组的权限。

返回用户拥有权限的字符串集合,同时从用户所属组及用户本身的权限中获取。

如果传入obj参数,则这个方法不会检查该模型权限,而只会检查这个出传入对象的权限。

如果传入参数obj,则这个方法不会检查指定的权限列表,只检查指定对象的权限。

PermissionsMixin和ModelBackend

这里是一个兼容admin的自定义的用户app的例子。这个用户模型使用email地址作为username,并且生日是必填字段;除了用户账户上的adminflag之外,它本身不提供权限检查。除用户创建的表单外,此模型和所有内置的身份验证表单和视图兼容。此例只是说明了大多数组件如何协同工作,不要直接复制到生产环境里。

这段代码将一直存在于models.py文件中,用于自定义身份验证app:

THE END
1.什么是TLS证书?如何使用证书进行身份验证?TLS(传输层安全)证书是用于加密通信和验证通信双方身份的一种安全证书。TLS证书可以用于HTTPS协议,用于保护网站或应用程序与用户之间的通信安全。TLS证书包含了一些关键信息,例如证书持有者的公钥、证书持有者的身份信息、证书的有效期等。 使用TLS证书进行身份验证的过程如下: 客户端发起连接请求:客户端向服务端发起连接https://www.mbalib.com/ask/question-b5a5c3e2a5f8d2a9582207d107c1541b.html
2.该证书无效不能用于验证此web站点的身份阿里云为您提供该证书无效不能用于验证此web站点的身份相关的19276条产品文档内容及常见问题解答内容,还有等云计算产品文档及常见问题解答。如果您想了解更多云计算产品,就来阿里云帮助文档查看吧,阿里云帮助文档地址https://help.aliyun.com/。https://help.aliyun.com/wordpower/5705748-1.html
3.服务器身份验证当您的设备或其他客户端尝试连接时 AWS IoT Core, AWS IoT Core 服务器将发送一个 X.509 证书,您的设备将使用该证书对服务器进行身份验证。身份验证是通过验证 X.509 证书链在TLS层上进行的。这与您访问时浏览器使用的方法相同HTTPSURL。如果要使用您自己的证书颁发机构提供的证书,请参阅管理CA 证书。 当您https://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/server-authentication.html
4.如何选择三种验证类型的https证书选择用于身份验证的证书https证书验证类型的选择主要取决于您要加密其网站的企业或组织的类型。个人或博客类的网站选择DV SSL证书就足够了。 另一方面,如果您是为事业单位机构,非营利组织或运营受限的注册商业实体购买的,则可能要考虑OVSSL证书。涉及到在线交易、可识别个人身份或敏感信息的较大企业必须选择EV SSL证书。 https://blog.csdn.net/weixin_43762887/article/details/114526188
5.IPsec使用证书身份验证进行配置要进行证书身份验证,您需要在您的FSxONTAP文件系统上生成并安装来自证书颁发机构的证书,以及将访问文件系统数据的客户端。以下示例 Amazon Private Certificate Authority 用于设置私有证书颁发机构,并生成要安装在文件系统和客户端上的证书。使用 Amazon Private Certificate Authority,您可以创建由根证书颁发机构和从属证书https://docs.amazonaws.cn/fsx/latest/ONTAPGuide/config-ipsec-ca-auth.html
6.什么是SSL双向认证,与单向认证证书有什么区别?是用于用户浏览器和网站服务器之间的数据传输加密,实现互联网传输安全保护,大多数情况下指的是服务器证书。服务器证书是用于向浏览器客户端验证服务器,这种是属于单向认证的SSL证书。但是,如果服务器需要对客户端进行身份验证,该怎么办?这就需要双向认证证书。 https://maimai.cn/article/detail?fid=1563723342&efid=22hpZvd6d4O3gruA01YrTA
7.HTTPS权威指南:在服务器和Web应用上部署SSL/TLS和PKI(2) 验证出示的证书,或使用其他方式进行身份验证。 (3) 对将用于保护会话的共享主密钥达成一致。 (4) 验证握手消息并未被第三方团体修改。 注意 在实际使用中,第2步和第3步都是密钥交换(更通用的说法是密钥生成)的一部分,密钥交换是一个单独的步骤。我更喜欢将它们分开来说,用以强调协议的安全性取决于正确https://www.ituring.com.cn/book/tupubarticle/11135
8.什么是相互身份验证TLS(mTLS)?mTLS如何运作如何使用?相互身份验证传输层安全协议(mTLS)是一种在网络通信中用于确保通信双方身份验证和数据机密性的协议。它建立在传输层安全协议(TLS)的基础之上,通过在TLS握手过程中进行双方证书的互相验证,以确保通信双方的身份合法和可信。在mTLS中,通。 币界网报道: 相互身份验证传输层安全协议(mTLS)是一种在网络通信中用于确保通信https://www.528btc.com/college/1696744275134611.html
9.WorkspaceONEBoxer的应用程序配置AuthenticationType 字符串 证书 当身份验证类型设置为证书时,如果为 Exchange Server 配置了身份验证证书,则将自动启用基于证书的身份验证并对用户进行身份验证。OnlineMeetingsCBAEnabled 是基于帐户的 KVP,用于从适用于 Android 的 Workspace ONE Boxer 到 Microsoft Teams 和 Zoom 会议的现代身份验证。注意https://docs.vmware.com/cn/VMware-Workspace-ONE-UEM/services/Boxer_Admin_Guide/GUID-ApplicationConfigurations.html
10.配置X.509证书身份验证—GeoServer2.24.xUserManual证书身份验证涉及使用公钥/私钥来标识自己。与基本用户名和密码方案相比,这是一个更安全的替代方案。 X.509是一个定义良好的公钥证书格式标准。本教程将介绍设置X.509证书身份验证的过程。 先决条件? 本教程假设: 支持使用客户端证书进行身份验证的Web浏览器,也称为“双向SSL”。本教程使用火狐. https://www.osgeo.cn/geoserver-user-manual/security/tutorials/cert/index.html
11.金山办公技能认证隐私政策为帮助您成为我们的用户,即完成账号创建,以便我们为您提供注册我们用户服务,我们为您提供了多种注册渠道供您自行选择。当您选择使用手机号码或电子邮箱注册时,您需要向我们提供您的手机号码、电子邮箱地址及密码,我们使用这类信息发送验证码信息以供您提交验证身份是否有效。 https://www.wps.cn/privacy/kos
12.上海市数字证书认证中心有限公司产品介绍行业动态代码签名证书(Code Signing Certificates)针对程序代码和内容建立了一种数字化的验证及保护,用于识别和验证您的身份与您的代码,并保证代码自添加签名后未被篡改。可在您的代码被用户下载、安装或运行时,通过系统显示您的身份信息,大幅提高代码的安全性和可信性。 https://www.sheca.com/industry/c5c686992d20430eb603206f03f64b22
13.什么是相互身份验证?双向身份验证CloudflareSSH 可以使用公钥身份验证或证书身份验证。换句话说,在 SSH 中可以用公钥或公钥证书进行相互身份验证。 TLS:虽然默认情况下 TLS 不会相互验证连接的两端,但它可以用于此目的。Mutual TLS (mTLS) 是最常用的相互身份验证类型之一。在 mTLS 中,连接的两端都有一个 TLS 证书。mTLS 常被用于 API 安全、IoT 安全和https://www.cloudflare-cn.com/learning/access-management/what-is-mutual-authentication/
14.什么是身份验证?Cloudflare额外的身份验证因素 除了上面列出的三个主要因素之外,安全行业的一些成员还提出或使用了额外的身份验证因素。其中两个额外因素是位置(用户在哪里)和时间(他们访问系统的时间)。 通过数字证书验证身份 除了使用上述身份验证因素之外,还可以向已知和受信任的实体颁发数字证书。数字证书是一个小的数字文件,其中包含用于验证https://www.cloudflare.com/zh-cn/learning/access-management/what-is-authentication/
15.基于属性的云计算远程证明认证研究AET本文介绍了基于云计算下的TPM框架实现的基于属性的云计算远程证明,在进行属性远程证明过程中,采用了属性权威中心作为可信第三方,对云平台的配置计算其满足的属性,并能够验证属性证书的可靠性。此外,本文基于可信第三方AIK证书中心对用户和平台身份进行认证。针对属性证书验证中的签密过程,本文做了缓存处理,减少了签密算法http://www.chinaaet.com/article/3000016262
16.什么是radius认证服务器?Worktile社区身份验证:Radius认证服务器可以提供各种不同的身份验证方法,如基于口令(用户名和密码)、证书、令牌等。用户在连接到网络后,通过提供相应的凭证来进行身份验证,并验证其合法性。 Radius(Remote Authentication Dial-In User Service)是一种用于网络身份认证和授权的协议。而Radius认证服务器是指用来进行Radius协议认证的服https://worktile.com/kb/ask/1389037.html
17.什么是相互身份验证TLS(mTLS)?mTLS如何运作如何使用?相互TLS 简称 mTLS,是一种相互身份验证的方法。mTLS 通过验证他们都拥有正确的私人密钥来确保网络连接两端的各方都是他们声称的身份。他们各自的 TLS 证书中的信息提供了额外的验证。 mTLS 通常被用于零信任安全框架*,以验证组织内的用户、设备和服务器。它也可以帮助保持 API 的安全。 https://www.jb51.net/blockchain/888058.html
18.什么是ca证书?ssl证书与ca证书的区别有哪些?聚名资讯CA 证书是由认证机构(CA,Certificate Authority)签发的数字证书,用于验证网站或服务器的身份和加密通信。CA 是一个可信任的第三方实体,其责任是验证证书请求者的身份,并签发证书来证明该身份的真实性。 SSL 证书是一种由 CA 签发的特定类型的数字证书,用于保护网站和服务器的安全通信。SSL(Secure Sockets Layer)是https://www.juming.com/zx/19849.html
19.HTTP转HTTPS—使用OpenSSL创建自签名SSL证书以及Tomcat配置SSLhttps协议中身份认证的部分是由数字证书来完成的,证书由公钥、证书主体、数字签名等内容组成,在客户端发起SSL请求后,服务端会将数字证书发给客户端,客户端会对证书进行验证,并获取用于秘钥交换的非对称密钥。 数字证书有两个作用: 1)身份授权。确保浏览器访问的网站是经过CA验证的可信任的网站。 2)分发公钥。每个数https://cloud.tencent.com/developer/article/1558378