手册:经理经理和AuthMeor

来自MyaWiki.Org
跳转到导航 跳到搜索

其他语言:
英语β丹麦语β使之

实习经理授权管理器是否有两个与认证相关的框架媒体维基1.27那是为了取代“只有一个!”性质AuthPuxin(以前的身份验证系统),无法进行联合登录(例如,“用你的谷歌帐户登录”),而不使用各种钩子来攻击MyaWiki对基于密码的身份验证的关注,以及无法使用除cookie之外的任何其他内容进行会话管理,而不需要再次使用各种钩子来攻击MeaWiWi依赖于基于PHP的Cookie的会话。

他们做什么?[编辑]

实习经理涉及接收传入请求并将其与用户会话连接,即请求来自登录用户(或不),以及任何应该在PHP的请求之间持久存在的数据。$会话. 通常,这意味着持有“会话密钥”和用户的ID和令牌的cookie,但它可以很容易地基于凭据。奥瑙报头或热释光客户端证书。

授权管理器是通过提供凭据来登录的。特殊:UserLogin诸如此类,并用新凭据创建帐户。这包括通常的用户名和密码形式,还包括诸如通过谷歌、脸谱网或其他第三方认证服务登录的机制;多因素认证;以及其他登录时间检查,如密码重置、CAPTCHA等。

我怎样使用它们?[编辑]

作为系统管理员[编辑]

可用会话提供程序通过美元供应商. 有关详细信息,请参阅全局文档和各个会话提供程序的文档。

可用的身份验证提供程序通过$WGuSuthMaungEngIfg. 有关详细信息,请参阅全局文档和个人身份验证提供者的文档。

为了处理传统上要求用户输入其当前密码以确认的操作,AuthMeor相反要求用户最近在当前会话期间主动登录。要配置“最近”的确切含义,请使用$gRealTimeTimeTimes为每个操作设置时间限制。要确定当用户使用像OAuthe这样的东西时,每个请求都被单独认证,“登录”是不可能的,使用$WAGOWSCORITION敏感性操作不可认证.

作为消费者[编辑]

会议[编辑]

要从代码中访问当前会话,最直接的机制是使用获取()你的方法WebREST目标结果MIDAWIKI\Session会话对象具有访问过去使用过的数据的方法。$WebRestQuest-GETSeaStestDATA()> SETSESEDATA数据()或直接访问$会话.

测试一个会话是否当前活动,您以前使用过类似的代码SeStIsId()!=’获取会话对象并使用它>方法若要确保会话持久化,请取出它并使用它。->()方法代替使用WFSETUPS().

如果需要在客户端请求以外的上下文中访问会话数据,例如,如果您保存了会话ID以运行后台作业,并且需要更新会话数据中的状态,请使用MIDAWIKI\Session \ Session管理器::Stutelon()-> GeSession PyId().

认证[编辑]

如果您正在执行一个安全敏感的操作,该操作通常会请求用户的密码进行验证,使用MeaWiki\Auth\AuthMeals::Stutelon()-> SuffiTrimeTimeOffice语句()检查用户最近是否已验证过,必要时引导用户通过特殊:UserLogin重新认证。专页如果您返回非false,则可以为您处理此问题。特殊页面::.

除此之外,大多数“消费者”代码不需要直接与AuthMeor交互,因为您不应该实现自己的身份验证流。若要确定用户是否登录,请使用通常的方法,如GETUSER()关于一个图标文本源. 要查看用户是否经过身份验证,请让它们通过通常的方法登录。

但是,如果您真的坚持:AuthMealMead中的身份验证是一个多步骤的过程,类似于此:

  1. 调用$AuthMeals> > CueAudiTaleNoWe()以确定是否可能进行身份验证。
  2. 调用$AuthMease> GeAudioTestCaseAdvices(AuthMease::ActoLogyLogin)以确定需要哪些身份验证请求子类,将它们转换为字段,并将它们呈现给用户。
  3. 一旦用户提交表单,使用AudioTraseRe::LoopRevestsFaseSudioSe()将数据填充到请求中,并将它们传递给$AuthMease>
  4. 采取行动取决于AuthenticationResponse的地位:
    • 对于状态UI,将需要的身份验证请求转换为字段,呈现给用户,提交时使用AudioTestReQuest::LoopRevestsFaseSudioSe(),用数据填充新的请求,并将它们传递给$AuthMeave:ExtRealAuthCudioTo(),并处理新的响应。
    • 对于状态重定向,将用户重定向到指定的URL。最后,用户应该被重定向,此时需要的身份验证请求应该用数据填充并传递给$AuthMeave:ExtRealAuthCudioTo()。
    • 对于状态传递,身份验证已成功。
    • 对于状态重新启动,使用第三方服务进行身份验证已成功,但这些凭据与本地帐户不关联。将此视为UI或失败。
    • 对于状态失败,身份验证失败。该响应可能包含一个附加的身份验证请求,该请求可以传递到$AuthMeals>

帐户创建和链接第三方凭证的过程是相似的。

作为提供者[编辑]

如果您编写的代码将为SeaSeMeMeor或AuthMeMeor提供新功能,首先您需要决定您提供的是什么样的东西:

  • 如果您正在实现一种新的方法来获取WebRequest并从中确定已验证的用户和会话数据,则需要实现。MeaWiki\session会话提供程序.
    • 如果你正在做一些类似于登录的事情,SeaServices不是你想要的。您可能需要一个原始身份验证提供者。
  • 如果您想一般性地在从WebRequest获得会话的过程中添加额外的检查,您可能希望查看会话元数据会话校验挂钩第一个允许添加额外的元数据来保存会话,而第二个允许您在加载会话时查看元数据,并且如果必要的话否决它的使用。
  • 如果您正在实现一种新的登录方式,则需要实现MiaWiki\Auth\PrimalValueAdvestor提供者.
    • 如果你的东西不是一个登录的新方式,只是一个新的方式来登录“OAuth/TLS客户端证书”,你就不想这样。你可能需要一个SeaStices提供程序。
  • 如果您正在执行一些新的检查,某人必须在能够登录之前通过,例如CAPTCHA,您需要实现MeaWiki\Auth\Pube认证提供者.
  • 如果您正在执行登录后应该发生的事情,包括测试第二个因素,则需要实现MeaWiki\Auth.NealAuthor认证提供者.

在所有情况下,提供者都是使用对象工厂美元供应商$WGuSuthMaungAutoCiFig然后通过SETTER方法注入依赖项。

会话提供程序[编辑]

类文档:MeaWiki\session会话提供程序

有三种类型的会话提供者,基于两种能力:

  • 保存任何随机生成的会话ID的能力,而ID是基于不能更改的请求的属性的。
  • 与任何登录的任意用户相关联的能力,而与具有本质上与请求相关联的用户相关。
    • 后一个属性有时被称为使会话“可变”与“不变”。

由此产生的三种类型是:

  • 可以保存任意随机生成的会话ID的提供者,也可以与任意的用户相关联。这些例子的一个典型例子就是传统的基于cookie的会话。
    • 提供者不必做任何事情来保存用户的身份;只要提供了会话ID,就可以从保存的元数据中确定用户。
  • 具有与请求本质上关联的用户和会话ID的提供程序。这里的好例子是OAuth-TLS客户端证书:OAuthHead或TLS客户端证书与特定用户相关联,并且不能随便更改它们以与不同的用户关联。
  • 具有与请求本质上关联的用户的提供者,但是可以保存任何随机生成的会话ID。例如,可以使用“不透明”字段来保持会话ID的HTTP摘要认证。
    • 您通常可以采用具有固有用户的方法,并且不能够保存随机生成的会话ID,并使用Cookie来赋予其能力;MIDAWIKI\Session基类实现这样的提供者的Cookie部分。

也有可能有一个提供者与任何一个任意用户相关联,但是缺乏保存随机生成的会话ID的能力。但是,这似乎没有任何意义。

会话提供程序通过返回一个会话来提供会话。MIDAWIKI\Session会话信息来自任一对象提供()(对于与WebRequest相关联的会话)NeSESSION信息()(对于尚未与任何WebRequest关联的新会话)。SSESITENC信息的属性如下:

  • Session信息的优先级:如果有机会,多个提供者在同一请求中找到会话数据,则使用优先级最高的会话数据。如果有一条领带,SISESTMIVER将抛出一个错误。一般来说,提供者要么总是使用SeSistFiels::Max优先级(即“您必须使用这个SeaStudio信息”),要么将期望的优先级作为其构造函数的参数。
  • 会话ID。如果一个提供者标识了一个用户,则提供一个SID信息而不提供ID是可以的。
  • 请求是否标识用户,以及该用户是否被认证或刚刚命名。使用基于cookie的会话作为示例,
    • 当用户名或用户名Cookie不存在于请求中时,“没有用户”结果。用户将从保存的会话元数据中确定。
    • 当USEID或用户名Cookie存在时,“未经身份验证的用户”结果,但“令牌”cookie丢失。任何用户的ID或名称都是公开可用的,所以如果没有令牌,我们就不能知道这不是欺骗企图。
      • 这仍然是值得的,因为我们可以检查保存的会话元数据标识同一个用户,以防止某人使用已经过期的会话ID并重新分配给不同的用户。
    • 当用户名或用户名Cookie存在时,“令牌”cookie也出现“验证用户”结果,以及HasiQuales($USE-> GETtoKEN),$CokiToKEN返回true。由于令牌应该是秘密的,所以我们可以假设正确的令牌意味着这是已知的用户。
      • 从WebRestQuestin输入的令牌必须始终使用哈什均等避免定时攻击。
    • 没有用户用户名或用户名cookie和“令牌”cookie存在的情况,但是HasiQuales($USE-> GETtoKEN),$CokiToKEN返回false。如果发生这种情况,提供者不能提供任何SISTEXION信息。
  • 是否在WebReQuest中发现了不同的位:会话ID、用户令牌和强制HTTPS标志。
  • 提供者希望与会话关联的任何附加元数据。如果提供者除了认证之外还进行授权(例如OAuthGrand),这通常是有用的。

会话提供程序还负责将会话“持久化”到WebRebug,这是在调用持久性(). 如果提供者具有保存随机生成的会话ID的能力,那么它在这里是这样做的。如果它有独立保存用户身份的能力,它应该总是保存用户的ID或名称,但必须只保存用户的令牌,如果会话的> -BeReDeMeLeMuleServer()方法返回true。

对于正确的缓存行为,会话提供程序需要使用。GETVALYHEADER()GETVALYCOOKIE()以指示它使用哪些请求头和cookie来确定SeSeStudio信息。它还需要提供消息来识别错误消息中的会话,并提供一个提示,说明为什么会话在它们应该是不被保留时(例如,浏览器被设置为拒绝Cookie)。

预认证提供者[编辑]

类文档:MeaWiki\Auth\Pube认证提供者MeaWiki\AuthPoT预认证提供者

“预”身份验证提供程序可以为登录或帐户创建表单提供字段,并在任何实际身份验证发生之前执行登录或帐户创建尝试的检查。例如,它可能会通过IP地址阻止登录尝试,或者呈现一个必须要解决的CAPTCHA来创建帐户。

初级认证提供者[编辑]

类文档:MiaWiki\Auth\PrimalValueAdvestor提供者原始认证提供者

“主”认证提供者负责实际的用户身份验证:

  • 从登录表单中获取输入,确定哪个用户正在尝试登录,并对该用户进行实际身份验证。
  • 确保创建的用户稍后能够登录。
  • 测试身份验证后端存储中是否已经存在用户名。
  • 更改与现有用户关联的身份验证数据,或添加和移除与第三方认证提供者帐户的关联。

AuthMeor可以被配置为使用多个主认证提供者。在初始表单提交时,每一个主提供者依次被尝试,并且如果它返回弃权结果,则尝试下一行,直到任何一个返回非弃权响应,或者它从提供者中耗尽(在这种情况下,它生成失败)。

提供者的认证过程也是多步骤的:非弃权响应包括通常的传递和失败,而且UI还提供了一个附加的输入表单,供用户填写并重定向以将浏览器发送给某些第三方,最终应该重定向返回继续验证过程。

二级认证提供者[编辑]

类文档:MeaWiki\Auth.NealAuthor认证提供者第二认证提供者

在用户已被“主”身份验证后,调用“辅助”身份验证提供程序。例如,它可能要求多因素身份验证的第二个因素,提示用户更改密码,或者检查用户是否被阻止。辅助提供者也被称为帐户创建,这样他们可以做一些事情,如提示建立多因素认证。

AuthMeor可以配置多个辅助身份验证提供者,在这种情况下,所有的运行都必须通过,或者放弃,以便验证过程成功。与主提供者一样,它们可以用UI响应并重定向以与用户交互。

认证间提供者通信[编辑]

AuthMever在认证过程中提供了对提供者模块之间通信的支持。例如,具有口令期满概念的基于密码的主认证提供者可以调用$---GETMaungServer()-> SETAudioTestCaseStata数据(“重置PASS”,$data),这将导致辅助认证提供程序。MeaWiki\AuthReStaseWord第二认证提供者提示用户更改密码。每个提供者都要记录它使用的认证数据“密钥”以及需要提供什么数据来完成它的工作。

也见[编辑]