⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfc4616.txt

📁 广泛使用的邮件服务器!同时
💻 TXT
📖 第 1 页 / 共 2 页
字号:
Network Working Group                                   K. Zeilenga, Ed.Request for Comments: 4616                           OpenLDAP FoundationUpdates: 2595                                                August 2006Category: Standards Track  The PLAIN Simple Authentication and Security Layer (SASL) MechanismStatus of This Memo   This document specifies an Internet standards track protocol for the   Internet community, and requests discussion and suggestions for   improvements.  Please refer to the current edition of the "Internet   Official Protocol Standards" (STD 1) for the standardization state   and status of this protocol.  Distribution of this memo is unlimited.Copyright Notice   Copyright (C) The Internet Society (2006).Abstract   This document defines a simple clear-text user/password Simple   Authentication and Security Layer (SASL) mechanism called the PLAIN   mechanism.  The PLAIN mechanism is intended to be used, in   combination with data confidentiality services provided by a lower   layer, in protocols that lack a simple password authentication   command.Zeilenga                    Standards Track                     [Page 1]RFC 4616                The PLAIN SASL Mechanism             August 20061.  Introduction   Clear-text, multiple-use passwords are simple, interoperate with   almost all existing operating system authentication databases, and   are useful for a smooth transition to a more secure password-based   authentication mechanism.  The drawback is that they are unacceptable   for use over network connections where data confidentiality is not   ensured.   This document defines the PLAIN Simple Authentication and Security   Layer ([SASL]) mechanism for use in protocols with no clear-text   login command (e.g., [ACAP] or [SMTP-AUTH]).  This document updates   RFC 2595, replacing Section 6.  Changes since RFC 2595 are detailed   in Appendix A.   The name associated with this mechanism is "PLAIN".   The PLAIN SASL mechanism does not provide a security layer.   The PLAIN mechanism should not be used without adequate data security   protection as this mechanism affords no integrity or confidentiality   protections itself.  The mechanism is intended to be used with data   security protections provided by application-layer protocol,   generally through its use of Transport Layer Security ([TLS])   services.   By default, implementations SHOULD advertise and make use of the   PLAIN mechanism only when adequate data security services are in   place.  Specifications for IETF protocols that indicate that this   mechanism is an applicable authentication mechanism MUST mandate that   implementations support an strong data security service, such as TLS.   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this   document are to be interpreted as described in [Keywords].2.  PLAIN SASL Mechanism   The mechanism consists of a single message, a string of [UTF-8]   encoded [Unicode] characters, from the client to the server.  The   client presents the authorization identity (identity to act as),   followed by a NUL (U+0000) character, followed by the authentication   identity (identity whose password will be used), followed by a NUL   (U+0000) character, followed by the clear-text password.  As with   other SASL mechanisms, the client does not provide an authorization   identity when it wishes the server to derive an identity from the   credentials and use that as the authorization identity.Zeilenga                    Standards Track                     [Page 2]RFC 4616                The PLAIN SASL Mechanism             August 2006   The formal grammar for the client message using Augmented BNF [ABNF]   follows.   message   = [authzid] UTF8NUL authcid UTF8NUL passwd   authcid   = 1*SAFE ; MUST accept up to 255 octets   authzid   = 1*SAFE ; MUST accept up to 255 octets   passwd    = 1*SAFE ; MUST accept up to 255 octets   UTF8NUL   = %x00 ; UTF-8 encoded NUL character   SAFE      = UTF1 / UTF2 / UTF3 / UTF4               ;; any UTF-8 encoded Unicode character except NUL   UTF1      = %x01-7F ;; except NUL   UTF2      = %xC2-DF UTF0   UTF3      = %xE0 %xA0-BF UTF0 / %xE1-EC 2(UTF0) /               %xED %x80-9F UTF0 / %xEE-EF 2(UTF0)   UTF4      = %xF0 %x90-BF 2(UTF0) / %xF1-F3 3(UTF0) /               %xF4 %x80-8F 2(UTF0)   UTF0      = %x80-BF   The authorization identity (authzid), authentication identity   (authcid), password (passwd), and NUL character deliminators SHALL be   transferred as [UTF-8] encoded strings of [Unicode] characters.  As   the NUL (U+0000) character is used as a deliminator, the NUL (U+0000)   character MUST NOT appear in authzid, authcid, or passwd productions.   The form of the authzid production is specific to the application-   level protocol's SASL profile [SASL].  The authcid and passwd   productions are form-free.  Use of non-visible characters or   characters that a user may be unable to enter on some keyboards is   discouraged.   Servers MUST be capable of accepting authzid, authcid, and passwd   productions up to and including 255 octets.  It is noted that the   UTF-8 encoding of a Unicode character may be as long as 4 octets.   Upon receipt of the message, the server will verify the presented (in   the message) authentication identity (authcid) and password (passwd)   with the system authentication database, and it will verify that the   authentication credentials permit the client to act as the (presented   or derived) authorization identity (authzid).  If both steps succeed,   the user is authenticated.   The presented authentication identity and password strings, as well   as the database authentication identity and password strings, are to   be prepared before being used in the verification process.  The   [SASLPrep] profile of the [StringPrep] algorithm is the RECOMMENDED   preparation algorithm.  The SASLprep preparation algorithm isZeilenga                    Standards Track                     [Page 3]RFC 4616                The PLAIN SASL Mechanism             August 2006   recommended to improve the likelihood that comparisons behave in an   expected manner.  The SASLprep preparation algorithm is not mandatory   so as to allow the server to employ other preparation algorithms   (including none) when appropriate.  For instance, use of a different   preparation algorithm may be necessary for the server to interoperate   with an external system.   When preparing the presented strings using [SASLPrep], the presented   strings are to be treated as "query" strings (Section 7 of   [StringPrep]) and hence unassigned code points are allowed to appear   in their prepared output.  When preparing the database strings using   [SASLPrep], the database strings are to be treated as "stored"   strings (Section 7 of [StringPrep]) and hence unassigned code points   are prohibited from appearing in their prepared output.   Regardless of the preparation algorithm used, if the output of a   non-invertible function (e.g., hash) of the expected string is   stored, the string MUST be prepared before input to that function.   Regardless of the preparation algorithm used, if preparation fails or   results in an empty string, verification SHALL fail.   When no authorization identity is provided, the server derives an   authorization identity from the prepared representation of the   provided authentication identity string.  This ensures that the   derivation of different representations of the authentication   identity produces the same authorization identity.   The server MAY use the credentials to initialize any new   authentication database, such as one suitable for [CRAM-MD5] or   [DIGEST-MD5].3.  Pseudo-Code   This section provides pseudo-code illustrating the verification   process (using hashed passwords and the SASLprep preparation   function) discussed above.  This section is not definitive.   boolean Verify(string authzid, string authcid, string passwd) {     string pAuthcid = SASLprep(authcid, true); # prepare authcid     string pPasswd = SASLprep(passwd, true);   # prepare passwd     if (pAuthcid == NULL || pPasswd == NULL) {       return false;     # preparation failed     }     if (pAuthcid == "" || pPasswd == "") {       return false;     # empty prepared string     }Zeilenga                    Standards Track                     [Page 4]RFC 4616                The PLAIN SASL Mechanism             August 2006     storedHash = FetchPasswordHash(pAuthcid);     if (storedHash == NULL || storedHash == "") {       return false;     # error or unknown authcid     }     if (!Compare(storedHash, Hash(pPasswd))) {       return false;     # incorrect password     }     if (authzid == NULL ) {       authzid = DeriveAuthzid(pAuthcid);       if (authzid == NULL || authzid == "") {           return false; # could not derive authzid       }     }     if (!Authorize(pAuthcid, authzid)) {       return false;     # not authorized     }     return true;   }   The second parameter of the SASLprep function, when true, indicates   that unassigned code points are allowed in the input.  When the   SASLprep function is called to prepare the password prior to   computing the stored hash, the second parameter would be false.   The second parameter provided to the Authorize function is not   prepared by this code.  The application-level SASL profile should be   consulted to determine what, if any, preparation is necessary.   Note that the DeriveAuthzid and Authorize functions (whether   implemented as one function or two, whether designed in a manner in   which these functions or whether the mechanism implementation can be   reused elsewhere) require knowledge and understanding of mechanism   and the application-level protocol specification and/or   implementation details to implement.   Note that the Authorize function outcome is clearly dependent on   details of the local authorization model and policy.  Both functions   may be dependent on other factors as well.Zeilenga                    Standards Track                     [Page 5]RFC 4616                The PLAIN SASL Mechanism             August 20064.  Examples   This section provides examples of PLAIN authentication exchanges.   The examples are intended to help the readers understand the above   text.  The examples are not definitive.   "C:" and "S:" indicate lines sent by the client and server,   respectively.  "<NUL>" represents a single NUL (U+0000) character.   The Application Configuration Access Protocol ([ACAP]) is used in the   examples.   The first example shows how the PLAIN mechanism might be used for   user authentication.   S: * ACAP (SASL "CRAM-MD5") (STARTTLS)   C: a001 STARTTLS   S: a001 OK "Begin TLS negotiation now"   <TLS negotiation, further commands are under TLS layer>   S: * ACAP (SASL "CRAM-MD5" "PLAIN")   C: a002 AUTHENTICATE "PLAIN"   S: + ""   C: {21}   C: <NUL>tim<NUL>tanstaaftanstaaf   S: a002 OK "Authenticated"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -