<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" 
    ipr="Trust200902" 
    submissionType="IETF" 
    docName="draft-ietf-sipcore-sip-token-authnz-09" 
    category="std" 
    xml:lang="en" 
    updates="3261" 
    tocInclude="true" 
    symRefs="true" 
    sortRefs="true" 
    version="3">
  <!-- xml2rfc v2v3 conversion 2.39.0 -->
  <!-- ********************************** FRONT ********************************** -->
<front>
    <title abbrev="3rd-Party Token-based AuthNZ for SIP">
         Third-Party Token-based Authentication and Authorization for Session Initiation Protocol (SIP)
    </title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-sipcore-sip-token-authnz-09"/>
    <author initials="R." surname="Shekh-Yusef" fullname="Rifaat Shekh-Yusef">
      <organization>Avaya</organization>
      <address>
        <postal>
          <street>425 Legget Drive</street>
          <city>Ottawa</city>
          <region>Ontario</region>
          <country>Canada</country>
        </postal>
        <phone>+1-613-595-9106</phone>
        <email>rifaat.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="C." surname="Holmberg" fullname="Christer Holmberg">
      <organization>Ericsson</organization>
      <address>
        <postal>
          <street>Hirsalantie 11</street>
          <city>Jorvas  02420</city>
          <region/>
          <country>Finland</country>
        </postal>
        <email>christer.holmberg@ericsson.com</email>
      </address>
    </author>
    <author initials="V." surname="Pascual" fullname="Victor Pascual">
      <organization>webrtchacks</organization>
      <address>
        <postal>
          <street/>
          <region/>
          <country>Spain</country>
        </postal>
        <email>victor.pascual.avila@gmail.com</email>
      </address>
    </author>
    <date year="2020"/>
    <area>RAI</area>
    <workgroup>SIP Core</workgroup>
    <keyword>SIP OAuth</keyword>
    <keyword>3rd party authentication</keyword>
    <keyword>Third party authentication</keyword>
    <abstract>
      <t>
    This document defines the "Bearer" authentication scheme for
    the Session Initiation Protocol (SIP), and a mechanism by
    which user authentication and SIP registration authorization
    is delegated to a third party, using the OAuth 2.0 framework
    and OpenID Connect Core 1.0.  This document updates RFC 3261
    to provide guidance on how a SIP User Agent Client (UAC)
    responds to a SIP 401/407 response that contains multiple
    WWW-Authenticate/Proxy-Authenticate header fields.        
      </t>
    </abstract>
  </front>
  <!-- ********************************** MIDDLE ********************************** -->
<middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>
      The Session Initiation Protocol (SIP) <xref target="RFC3261"/> uses the same framework
      as HTTP <xref target="RFC7230"/> to authenticate users: a simple
      challenge-response authentication mechanism that allows a SIP server to challenge a
      SIP client request and allows a SIP client to provide authentication
      information in response to that challenge.
      </t>
      <t>
      OAuth 2.0 <xref target="RFC6749"/> defines a token-based authorization
      framework to allow an OAuth client to access resources on behalf of its user.
      </t>
      <t>
      The OpenID Connect 1.0 specification <xref target="OPENID"/> defines
      a simple identity layer on top of the OAuth 2.0 protocol, which enables
      clients to verify the identity of the user based on the authentication
      performed by a dedicated authorization server, as well as to obtain basic 
      profile information about the user.
      </t>
      <t>
    This document defines the "Bearer" authentication scheme for the
   Session Initiation Protocol (SIP), and a mechanism by which user
   authentication and SIP registration authorization is delegated to a
   third party, using the OAuth 2.0 framework and OpenID Connect Core
   1.0. This kind of user authentication enables the single-sign-on feature,
   which allows the user to authenticate once and gain access to both SIP
   and non-SIP services.
      </t>
            <t>
      This document also updates <xref target="RFC3261"/>, by defining the User Agent Client (UAC) procedures 
      when a UAC receives a 401/407 response with multiple WWW-Authenticate/Proxy-Authenticate 
      header fields, providing challenges using different authentication schemes 
      for the same realm.
      </t>
      <t>   </t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>
      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 BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/>
          when, and only when, they appear in all capitals, as shown here.
        </t>
        <t>   </t>
      </section>
      <section anchor="sip.user.agent.types">
        <name>SIP User Agent Types</name>
        <t>
      The OAuth 2.0 authorization framework <xref target="RFC6749"/> defines two types of clients, confidential
      and public, that apply to the SIP UACs.
        </t>
        <ul spacing="normal">
      <li>Confidential User Agent: a SIP UAC that is capable of maintaining
        the confidentiality of the user credentials and any tokens obtained
        using these user credentials.
      </li>
          <li>Public User Agent: a SIP UAC that is incapable of maintaining the
        confidentiality of the user credentials and any obtained tokens.
      </li>
        </ul>
        <t>
        The mechanism defined in this document MUST only be used with  
        Confidential User Agents, as the UAC is expected to obtain and maintain tokens
        to be able to access the SIP network.
        </t>
        <t>   </t>
      </section>
      <!-- SIP User Agent Types -->
      
      <section anchor="tokens">
        <name>Token Types</name>
        <t>
      There are two types of tokens that might be used with this specification:
      </t>
      <ul spacing="normal">
      
      <li>Structured Token: a token that consists of a structured object that 
      contains the claims associated with the token, e.g. JWT as defined in <xref target="RFC7519"/>. 
      </li>
      <li>Reference Token: a token that consists of a random string that is used 
      to obtain the details of the token and its associated claims, as defined in <xref target="RFC6749"/>.
      </li>
        </ul>
      <t>    </t>
      </section>
      <!-- Tokens -->
      
  <section anchor="sec.authnz.flow">
      <name>Example Flows</name>
      <section anchor="sec.reg.discovered.as">
        <name>Registration</name>
        <t>
        <xref target="fig-register-flow"/> below shows an example of a SIP registration, where
        the registrar informs the UAC about the authorization server from which the UAC can
        obtain an access token in a 401 response
        to the REGISTER request.
        </t>
        <figure anchor="fig-register-flow">
          <name>Example Registration Flow</name>
        <artwork><![CDATA[
  UAC                         Registrar                          AS
---------------------------------------------------------------------
  |                               |                               |
  | [1] REGISTER                  |                               |
  |------------------------------>|                               |
  |                               |                               |
  | [2] 401 Unauthorized          |                               |
  |     WWW-Authenticate: Bearer "authz_server"="<authz_server>"  |
  |<------------------------------|                               |
  |                               |                               |
  | [3] The UAC interacts with the AS and obtains tokens, using   |
  |     some out-of-scope mechanism.                              |
  |<=============================================================>|
  |                               |                               |
  | [4] REGISTER                  |                               |
  |     Authorization: Bearer <access_token>                      |
  |------------------------------>|                               |
  |                               | [5] HTTP POST /introspect     |
  |                               |     {access_token}            |
  |                               |------------------------------>|
  |                               |                               |
  |                               | [6] 200 OK {metadata}         |
  |                               |<------------------------------|
  |                               |                               |
  | [7] 200 OK                    |                               |
  |<------------------------------|                               |
  |                               |                               |
]]></artwork>
        </figure>
        <t> 
        In step [1], the UAC starts the registration process by sending a 
        SIP REGISTER request to the registrar without any credentials. 
        </t>
        <t>
        In step [2], the registrar challenges the UA, by sending a SIP 
        401 (Unauthorized) response to the REGISTER request. In the response,
        the registrar includes information about the AS to contact in order
        to obtain a token.
        </t>
        <t>
        In step [3], the UAC interacts with the AS via an out-of-scope mechanism, potentially using the OAuth Native 
        App mechanism defined in <xref target="RFC8252"/>. The AS authenticates the user and provides the UAC with the 
        tokens needed to access the SIP service.
        </t>
        <t>
        In step [4], the UAC retries the registration process by sending a new
        REGISTER request that includes the access token that the UAC 
        obtained previously.
        </t>
        <t>
        The registrar validates the access token. If the access token is a
        reference token, the registrar MAY perform an introspection <xref target="RFC7662"/>,
        as in steps [5] and [6], in order to obtain more information
        about the access token and its scope, per <xref target="RFC7662"/>. 
        Otherwise, after the registrar validates the token to make sure it was
        signed by a trusted entity, it inspects its claims and acts upon it.
        </t>
        <t>
        In step [7], once the registrar has successfully verified and accepted the 
        access token, it sends a 200 (OK) response to the REGISTER request.
        </t>
        <t>   </t>
      </section>
      <!-- Registration-->

    <section anchor="sec.reg.preconfigured.as">
        <name>Registration with Preconfigured AS</name>
        <t>
        <xref target="fig-config-ua"/> shows an example of a SIP registration where
        the UAC has been preconfigured with information about the AS
        from which to obtain the access token.
        </t>
      <figure anchor="fig-config-ua">
        <name>Example Registration Flow - Authorization Server Information Preconfigured</name>
        <artwork><![CDATA[
  UAC                         Registrar                          AS
---------------------------------------------------------------------
  |                               |                               |
  | [1] The UAC interacts with the AS and obtains tokens, using   |
  |     some out of scope mechanism.                              |
  |<=============================================================>|
  |                               |                               |
  | [2] REGISTER                  |                               |
  |     Authorization: Bearer <access_token>                      |
  |------------------------------>|                               |
  |                               | [3] HTTP POST /introspect     |
  |                               |     {access_token}            |
  |                               |------------------------------>|
  |                               |                               |
  |                               | [4] 200 OK {metadata}         |
  |                               |<------------------------------|
  |                               |                               |
  | [5] 200 OK                    |                               |
  |<------------------------------|                               |
  |                               |                               |
]]></artwork>
      </figure>
        <t>
        In step [1], the UAC interacts with the AS using an out-of-scope mechanism, potentially using the OAuth Native 
        App mechanism defined in <xref target="RFC8252"/>. The AS authenticates the user and provides the UAC with the 
        tokens needed to access the SIP service.
        </t>
        <t>
        In step [2], the UAC retries the registration process by sending a new
        REGISTER request that includes the access token that the UAC 
        obtained previously.
        </t>
        <t>
        The registrar validates the access token. If the access token is a
        reference token, the registrar MAY perform an introspection,
        as in steps [3] and [4], in order to obtain more information
        about the access token and its scope, per <xref target="RFC7662"/>. 
        Otherwise, after the registrar validates the token to make sure it was
        signed by a trusted entity, it inspects its claims and acts upon it.
        </t>
        <t>
        In step [5], once the registrar has successfully verified and accepted the 
        access token, it sends a 200 (OK) response to the REGISTER request.
        </t>
        <t>   </t>
      </section>
      <!-- Registration with Preconfigured AS-->  
  </section>
    <!-- Example Flows-->
  </section>
    <!-- Introduction -->

  <section anchor="sec.sip">
      <name>SIP Procedures</name>
      <t>
      Section 22 of <xref target="RFC3261"/> defines the SIP procedures for the 
      Digest authentication mechanism. The same procedures apply to 
      the Bearer authentication mechanism, with the changes described in this section.
      </t>
      <section anchor="sec.sip.uac">
        <name>UAC Behavior</name>
        <section anchor="sec.sip.uac.obtain">
          <name>Obtaining Tokens and Responding to Challenges</name>
          <t>
          When a UAC sends a request without credentials (or with invalid credentials), 
          it could receive either a 401 (Unauthorized) response with a WWW-Authenticate header field or a 407 (Proxy 
          Authentication Required) response with a Proxy-Authenticate header field.
          If the WWW-Authenticate or Proxy-Authenticate header field indicates "Bearer" scheme authentication 
          and contains an address to an authorization server, the UAC contacts the 
          authorization server in order to obtain tokens, and includes the requested 
          scopes, based on a local configuration (<xref target="fig-register-flow"/>). 
          </t>
          <t>
            The detailed OAuth2 procedure to authenticate the user and obtain
            these tokens is out of scope of this document. 
            The address of the authorization server might already be known to the UAC via configuration. 
            In which case, the UAC can contact the authorization server for tokens 
            before it sends a SIP request (<xref target="fig-config-ua"/>). 
            Procedures for native applications are defined in <xref target="RFC8252"/>.
             When using the mechanism defined
            in <xref target="RFC8252"/> the user of the UAC will be directed to interact
            with the authorization server using a web browser, allowing the authorization server
            to prompt the user for multi-factor authentication, to redirect the user to
            third-party identity providers, and to enable the use of single-sign-on sessions.
          </t>
          <t>
          The tokens returned to 
          the UAC depend on the type of authorization server (AS): an OAuth AS provides an 
          access token and refresh token <xref target="RFC6749"/>. The UAC provides the access token to the
          SIP servers to authorize UAC's access to the service. The UAC uses the refresh token 
          only with the AS to get a new access token and refresh token before 
          the expiry of the current access token (see <xref target="RFC6749"/>, section 1.5 Refresh Token for details). 
          An OpenID Connect server returns 
          an additional ID-Token containing the SIP URI and other user-specific 
          details that will be consumed by the UAC.
          </t>
          <t>
        If the UAC receives a 401/407 response with multiple WWW-Authenticate/Proxy-Authenticate 
        header fields, providing challenges using different authentication schemes 
        for the same realm, the UAC provides credentials for one or more of the schemes 
        that it supports, based on local policy.
          </t>
        <t>
        NOTE: The address of the Authorization Server might be known to the	 		
        UAC e.g., using means of configuration, in which case the UAC can	 		
        contact the Authorization Server in order to obtain the access token	 		
        before it sends SIP request without credentials.
     </t>
        </section>
        <section anchor="sec.sip.uac.protect">
          <name>Protecting the Access Token</name>
          <t>
          <xref target="RFC6749"/> mandates that access tokens are protected with 
          TLS when in transit. However, TLS only guarantees hop-to-hop protection 
          when used to protect SIP signaling. Therefore the access token MUST be 
          protected in a way so that only authorized SIP servers will have access 
          to it. Endpoints that support this specification MUST support encrypted 
          JSON Web Tokens (JWT) <xref target="RFC7519"/> for encoding and protecting 
          access tokens when they are included in SIP requests, unless some other mechanism 
          is used to guarantee that only authorized SIP endpoints have access to 
          the access token.
          </t>
          <t>   </t>
        </section>
        <section anchor="sec.sip.uac.req.reg">
          <name>REGISTER Request</name>
          <t>
        The procedures in this section apply when the UAC has received a challenge that contains a "Bearer" scheme, and the UAC has obtained a token as 
        specified in <xref target="sec.sip.uac.obtain"/>.
          </t>
          <t>
        The UAC sends a REGISTER request with an Authorization header field containing
        the response to the challenge, including the Bearer scheme carrying a valid 
        access token in the request, as specified in <xref target="RFC6750"/>.
          </t>
          <t>
        Note that, if there were multiple challenges with different schemes, then the UAC may be 
        able to successfully retry the request using non-Bearer credentials.
          </t>
          <t>
        Based on local policy, the UAC MAY include an access token that has
        been used for another binding associated with the same AOR in the
        request.
          </t>
          <t>
        If the access token included in a REGISTER request is not accepted,
        and the UAC receives a 401 response or a 407 response, the UAC
        follows the procedures in <xref target="sec.sip.uac.obtain"/>.
          </t>
          <t>   </t>
        </section>
        <section anchor="sec.sip.uac.req.nonreg">
          <name>Non-REGISTER Request</name>
          <t>
        The procedures in this section apply when the UAC has received a challenge that contains a "Bearer" scheme, and the UAC has obtained a token as 
        specified in <xref target="sec.sip.uac.obtain"/>.
          </t>
          <t>
          When the UAC sends a request, it MUST include an Authorization header field 
          with a Bearer scheme, carrying a valid access token in the request, as specified
          in <xref target="RFC6750"/>. Based on local policy, the UAC MAY include 
          an access token that has been used for another dialog, or for another 
          stand-alone request, if the target of the new request is the same.
          </t>
          <t>
          If the access token included in a request is not accepted, and the UAC receives 
          a 401 response or a 407 response, the UAC follows the procedures in 
          <xref target="sec.sip.uac.obtain"/>.
          </t>
          <t>   </t>
        </section>
      </section>
      <!-- UAC Behavior -->
    <section anchor="sec.sip.uas">
        <name>UAS and Registrar Behavior</name>
        <t>
        When a UAS or Registrar receives a request that fails to contain
        authorization credentials acceptable to it, it SHOULD challenge the
        request by sending a 401 (Unauthorized) response. To indicate that
        it is willing to accept an access token as a credential, the
        UAS/Registrar MUST include a Proxy-Authentication header field in the
        response that indicates "Bearer" scheme and includes an address of an
        authorization server from which the originator can obtain an access token.
        </t>
        <t>
        When a UAS/Registrar receives a SIP request that contains an Authorization 
        header field with an access token, the UAS/Registrar MUST validate the access 
        token, using the procedures associated with the type of access token used, e.g. <xref target="RFC7519"/>.
        If the token provided is an expired access token, then the UAS MUST reply with 401 Unauthorized, as defined in section 3 of <xref target="RFC6750"/>.
        If the validation is successful, the UAS/Registrar can continue to process 
        the request using normal SIP procedures. If the validation fails, the UAS/Registrar 
        MUST reject the request.
        </t>
        <t>   </t>
      </section>
      <!-- UAS and Registrar Behavior -->
    <section anchor="sec.sip.proxy">
        <name>Proxy Behavior</name>
        <t>
        When a proxy receives a request that fails to contain
        authorization credentials acceptable to it, it SHOULD challenge the
        request by sending a 407 (Proxy Authentication Required) response.
        To indicate that it is willing to accept an access token as a
        credential, the proxy MUST include a Proxy-Authentication
        header field in the response that indicates "Bearer" scheme and
        includes an address to an authorization server from which the
        originator can obtain an access token.         
        </t>
        <t>
        When a proxy wishes to authenticate a received request, it MUST
        search the request for Proxy-Authorization header fields with 'realm'
        parameters that match its realm. It then MUST successfully validate
        the credentials from at least one Proxy-Authorization header field
        for its realm. When the scheme is "Bearer", the proxy MUST validate the
        access token, using the procedures associated with the type of access 
        token used, e.g., <xref target="RFC7519"/>.
        </t>
        <t>   </t>
      </section>
      <!-- Proxy Behavior -->
  </section>
    <!-- SIP Procedures -->
  
  <section anchor="at.claims">
      <name>Access Token Claims</name>
      <t>
    The type of services to which an access token grants access can be determined 
    using different methods. The methods used and the access provided by the token
    is based on local policy agreed between the AS and the registrar.
      </t>
      <t>
    If an access token is encoded as a JWT, it might contain a list of claims 
    <xref target="RFC7519"/>, some registered and some application-specific. The 
    REGISTRAR can grant access to services based on such claims,  
    some other mechanism, or a combination of claims and some other mechanism.
    If an access token is a reference token, the REGISTRAR will grant access 
    based on some other mechanism. Examples of such other mechanisms are 
    introspection <xref target="RFC7662"/>, user profile lookups, etc.
      </t>
      <t>   </t>
    </section>
    <section anchor="www-authenticate.response.header">
      <name>WWW-Authenticate Response Header Field</name>
      <t>
      This section uses ABNF <xref target="RFC5234"/> to describe the syntax of the WWW-Authenticate header 
      field when used with the "Bearer" scheme to challenge the UAC for credentials, 
      by extending the 'challenge' parameter defined by <xref target="RFC3261"/>.
      </t>
      <figure>
        <name>Bearer Scheme Syntax</name>
      <sourcecode type="abnf"><![CDATA[
    challenge  =/  ("Bearer" LWS bearer-cln *(COMMA bearer-cln))
    bearer-cln = realm / scope / authz-server / error / 
                 auth-param
    authz-server = "authz_server" EQUAL authz-server-value
    authz-server-value = https-URI
    realm = <defined in RFC3261>
    auth-param = <defined in RFC3261>
    scope = <defined in RFC6749>
    error = <defined in RFC6749>
    https-URI = <defined in RFC7230>
  ]]></sourcecode>
        </figure>
      <t>
  The authz-server parameter contains the HTTPS URI, as defined in 
  <xref target="RFC7230"/>, of the authorization server. The UAC can discover 
  metadata about the AS using a mechanism like the one defined in <xref target="RFC8414"/>.
      </t>
      <t>
  The realm and auth-param parameters are defined in <xref target="RFC3261"/>.
      </t>
      <t>
  Per <xref target="RFC3261"/>, the realm string alone defines the protection 
  domain. <xref target="RFC3261"/> states that the realm string must be 
  globally unique and recommends that the realm string contain a hostname or 
  domain name. It also states that the realm string should be a human-readable identifier
  that can be rendered to the user.
      </t>
      <t>  
  The scope and error parameters are defined in <xref target="RFC6749"/>.
      </t>
      <t>
  The scope parameter could be used by the registrar/proxy to indicate to the UAC 
  the minimum scope that must be associated with the access token to be able to get 
  service. As defined in <xref target="RFC6749"/>, the value of the scope parameter 
  is expressed as a list of space-delimited, case-sensitive strings. The strings are 
  defined by the authorization server. The values of the scope parameter are out of 
  scope of this document. The UAC will use the scope provided by the registrar to 
  contact the AS and obtain a proper token with the requested scope.
      </t>
      <t>
  The error parameter could be used by the registrar/proxy to indicate to the UAC 
  the reason for the error, with possible values of "invalid_token" or "invalid_scope".
      </t>
      <t>   </t>
    </section>
    <!-- WWW-Authenticate Response Header Field -->


  <section anchor="security.considerations">
      <name>Security Considerations</name>
      <t>
      The security considerations for OAuth are defined in <xref target="RFC6749"/>.
      The security considerations for bearer tokens are defined in <xref target="RFC6750"/>.
      The security considerations for  JSON Web Tokens (JWT) are defined in <xref target="RFC7519"/>.
      These security considerations also apply to SIP usage of access token as defined in this
      document.
      </t>
      <t>
      <xref target="RFC6749"/> mandates that access tokens are protected with TLS. 
      However, TLS only guarantees hop-to-hop protection when used to protect SIP 
      signaling. Therefore the access token MUST be protected in a way so that 
      only authorized SIP endpoints will have access to it. Endpoints that support 
      this specification MUST support encrypted JSON Web Tokens (JWT) <xref target="RFC7519"/> 
      for encoding and protecting access tokens when included in SIP requests, unless 
      some other mechanism is used to guarantee that only authorized SIP endpoints
      have access to the access token.
      </t>
      <t>   </t>
    </section>
    <!-- Security Considerations -->


  <section anchor="iana.considerations">
      <name>IANA Considerations</name>
    </section>
    <!-- IANA Considerations -->


  <section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>
   The authors would like to specially thank Paul Kyzivat for his multiple detailed reviews 
   and suggested text that significantly improved the quality of the document.
      </t>
      <t>
   The authors would also like to thank the following for their review and
   feedback on this document:
      </t>
      <t>
   Olle Johansson, Roman Shpount, Dale Worley, and Jorgen Axell.
      </t>
      <t>
   The authors would also like to thank the following for their review and
   feedback of the original document that was replaced with this document:
      </t>
      <t>
   Andrew Allen, Martin Dolly, Keith Drage, Paul Kyzivat, Jon Peterson,
   Michael Procter, Roy Radhika, Matt Ryan, Ivo Sedlacek, Roman Shpount,
   Robert Sparks, Asveren Tolga, Dale Worley, and Yehoshua Gev.
      </t>
      <t>
    The authors would also like to specially thank Jean Mahoney for her multiple 
    reviews, editorial help, and the coversion of the XML source file from v2 to v3.
      </t>
      
      <t></t>
      <t></t>
      <t></t>
      <t></t>
    </section>
    <!-- Acknowledgments -->

</middle>
  <!-- ********************************** BACK ********************************** -->
<back>
    <references>
      <name>Normative References</name>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3261.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6749.xml"/>
      <reference anchor="OPENID">
        <front>
          <title abbrev="OpenID">OpenID Connect Core 1.0</title>
          <author initials="N." surname="Sakimura" fullname="Nat Sakimura"/>
          <author initials="J." surname="Bradley" fullname="John Bradley"/>
          <author initials="M." surname="Jones" fullname="Michael Jones"/>
          <author initials="B." surname="de Medeiros" fullname="Breno de Medeiros"/>
          <author initials="C." surname="Mortimore" fullname="Chuck Mortimore"/>
          <date month="February" year="2014"/>
        </front>
      </reference>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7662.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7519.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6750.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8252.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7230.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8414.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5234.xml"/>
    </references>
  </back>
</rfc>