<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc toc="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc subcompact="no"?>
<?rfc rfcedstyle="yes"?>
<?rfc-ext allow-markup-in-artwork="yes" ?>
<!DOCTYPE rfc [
]>

<rfc ipr="pre5378Trust200902"
     docName="draft-yusef-sipcore-sip-authn-01"
     category="std"
     xml:lang="en"
     updates="3261">


<!-- ********************************** FRONT ********************************** -->
<front>

  <title abbrev="Third-Party Authentication for SIP">
         Third-Party Authentication for Session Initiation Protocol (SIP)
  </title>

  <author initials="R." surname="Shekh-Yusef" fullname="Rifaat Shekh-Yusef" role="editor">
    <organization>Avaya</organization>
    <address>
      <postal>
        <street>250 Sidney Street</street>
        <city>Belleville</city>
        <region>Ontario</region>
        <country>Canada</country>
      </postal>
      <phone>+1-613-967-5267</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></region>
        <country>Finland</country>
      </postal>
      <email>christer.holmberg@ericsson.com</email>
    </address>
  </author>

  <author initials="V." surname="Pascual" fullname="Victor Pascual">
    <organization>Oracle</organization>
    <address>
      <postal>
        <street />
        <region></region>
        <country>Spain</country>
      </postal>
      <email>victor.pascual.avila@oracle.com</email>
    </address>
  </author>


  <date year="2017" />
  <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 an authentication mechanism for SIP, that is
     based on the OAuth 2.0 and OpenID Connect Core 1.0 specifications, to
     enable the delegation of the user authentication to a dedicated
     third-party IdP entity that is separate from the SIP network elements
     that provide the SIP service.
  </t></abstract>

</front>



<!-- ********************************** MIDDLE ********************************** -->
<middle>

  <section title="Introduction" anchor="introduction">

    <t>
      The SIP protocol <xref target="RFC3261"/> uses the framework used by the HTTP
      protocol for authenticating users, which is a simple challenge-
      response authentication mechanism that allows a server to challenge a
      client request and allows a 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 clients to access resources on behalf of their user.
    </t>

    <t>
      The OpenID Connect 1.0 <xref target="OPENID" /> specifications 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 IdP entity, as well as to obtain basic profile
      information about the user.
    </t>

    <t>
     This document defines an authentication mechanism for SIP, that is
     based on the OAuth 2.0 and OpenID Connect Core 1.0 specifications, to
     enable the delegation of the user authentication to a dedicated
     third-party IdP entity that is separate from the SIP network elements
     that provide the SIP service.
    </t>

    <section title="Terminology" anchor="terminology">
      <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 <xref target="RFC2119" />.
      </t>
    </section>


    <section title="Roles" anchor="roles">
    <t><list>

      <t>
      resource owner
      <list><t>
        An entity capable of granting access to a protected resource. When
        the resource owner is a person, it is referred to as an end-user.
      </t></list>

      <list><t>
        In a typical SIP network, it is the management element in the system
        that acts as a resource owner.
      </t></list>
      </t>

      <t>
      resource server
      <list><t>
        The server hosting the protected resources or services, capable of accepting
        and responding to protected resource and services requests using access tokens.
      </t></list>
      </t>

      <t> <vspace blankLines="99" /> </t>

      <t>
      OAuth 2.0 client
      <list><t>
        An application making protected resource requests on behalf of the
        resource owner and with its authorization.  The term "client" does
        not imply any particular implementation characteristics (e.g.,
        whether the application executes on a server, a desktop, or other
        devices).
      </t></list>
      </t>

      <t>
      SIP client
      <list><t>
        An application making requests to access SIP services on behalf of the end-user.
      </t></list>
      </t>

      <t>
      authorization server
      <list><t>
        The server issuing tokens to the OAuth 2.0 client or SIP Client after
        successfully authenticating the resource owner and obtaining
        authorization.
      </t></list>
      </t>

      <t>
      Identity Provider (IdP)
      <list>
      <t>
        This definition is borrowed from <xref target="MITKB" />
      </t>


      <t>
        "IdP (Identity Provider), is a system that creates, maintains, and
        manages identity information for principals (users, services, or
        systems) and provides principal authentication to other service
        providers (applications) within a federation or distributed network.
        It is a trusted third party that can be relied upon by users and
        servers when users and servers are establishing a dialog that must be
        authenticated. The IdP sends an attribute assertion containing trusted
        information about the user to the SP".
      </t>

      </list>
      </t>

    </list></t>

    <t> <vspace blankLines="1" /> </t>
    </section> <!-- Roles -->


    <section title="ID Token" anchor="id.token">

    <t>
      ID token, as defined in the OpenID document, is a security token that contains
      claims about the authentication of an end-user by an authorization server.
    </t>

    <t> <vspace blankLines="99" /> </t>
    </section>  <!-- ID Token -->


    <section title="SIP User Agent Types" anchor="sip.user.agent.types">
    <t>
      <xref target="RFC6749"/> defines two types of clients, confidential
      and public, that apply to the SIP User Agents.
    </t>


    <t>
    <list style="symbols">
      <t>Confidential User Agent: is a SIP UA that is capable of maintaining
        the confidentiality of the user credentials and any tokens obtained
        using these user credentials.
      </t>

      <t>Public User Agent: is a SIP UA that is incapable of maintainings the
        confidentiality of the user credentials and any obtained tokens.
      </t>
    </list>
    </t>

    <t> <vspace blankLines="1" /> </t>
    </section>  <!-- SIP User Agent Types -->


    <section title="Authentication Types" anchor="authentication.types">
    <t>

    There are two types of user authentications in SIP:

    <list style="symbols">
      <t>Proxy-to-User: which allows a server that is providing a service to
         authenticate the identity of a user before providing the service.
      </t>

      <t>User-to-User: which allows a user receiving a request to authenticate
         the identity of the remote user before processing the request.
      </t>
    </list>

    The mechanism defined in this document addresses the proxy-to-user authentication only.
    For user-to-user authentication refer to the mechanism defined in [STIR].

    </t>

    <t> <vspace blankLines="99" /> </t>
    </section>  <!-- Authentication Types -->

  </section> <!-- Introduction -->



  <section title="Authentication using the Authorization Code Flow"
           anchor="authentication.code.flow">

  <t>
    Authorization Code Flow is used by the SIP UA to authenticate to a
    third-party IdP entity to obtain an authorization code that would be
    later used by the SIP Proxy to obtain tokens to allow the SIP UA to
    register and get service from the SIP network.

  </t>

  <t> <vspace blankLines="1" /> </t>

    <section title="Public UA with Rich UI" anchor="public.ua.with.rich.ui">

    <t>
      The following figure provides a high level view of flow of messages
      for the user authentication using a Public UA that has a rich UI that would
      prompt the user for his credentials:
    </t>

<figure><artwork>
<![CDATA[
User                            Proxy                   Authorization
Agent                                                          Server
---------------------------------------------------------------------
  |                               |                               |
  | F1 REGISTER                   |                               |
  |------------------------------>|                               |
  |                        F2 302 |                               |
  |<------------------------------|                               |
  |                               |                               |
  |                               |                               |
The UA prompts the user to provide his/her credentials.           |
The UA then, as per OAuth 2.0 protocol, authenticates the user to |
the AuthZ server, and obtains an authorization code, which the UA |
will later hand to the Proxy.                                     |
  |<------------------------------------------------------------->|
  |                               |                               |
  |                               |                               |
  | F3 REGISTER [authz code]      |                               |
  |------------------------------>|                               |
  |                               |                               |
  |                               | The proxy will then use the   |
  |                               | authz code to obtain tokens   |
  |                               | from the authz server         |
  |                               |<----------------------------->|
  |                               |                               |
  |                     F4 200 OK |                               |
  |<------------------------------|                               |
  |                               |                               |
Both the proxy and the UA will then create a shared-key based on  |
the from-tag, to-tag, and call-id are taken from the 200 OK       |
  |                               |                               |

]]>
</artwork></figure>

    <t> <vspace blankLines="99" /> </t>


    <t>
      The UA initially sends a REGISTER request (F1) without providing any
      credentials. The proxy redirects the UA by responding with 302 (F2).
    </t>

    <t>
      The UA will then contact the Authorization Server and obtain an
      authorization code to be used with the SIP proxy.
    </t>

    <t>
      The UA then retries the request (F3) and includes the authorization
      code in the body of the request.
    </t>

    <t>
      The proxy then contacts the Authorization Server and exchanges the
      authorization code for tokens. If the proxy is successful in exchanging
      the authorization code with the tokens, the proxy then replies with 200 OK
      to completed the registration process, and locally generates the shared-key
      with the UA for this user.
    </t>

    <t>
      When the UA receives the 200 OK, it will follow the same procedure used by
      the proxy and calculate its shared-key locally.
    </t>

    <t> <vspace blankLines="1" /> </t>

    <section title="Registration" anchor="rich.ui.registration">

    <t>
      The UA initiates the process by sending a REGISTER request (F1) to
      the proxy. The proxy will redirect the UA to the Authorization Server
      by responding with 302 (F2) that includes the address of the
      Authorization Server in the form of an HTTP URI.
    </t>

    <t>
      The UA will then contact the Authorization Server and obtain an
      authorization code to be used with the SIP proxy. The method
      used by the UA to obtain the code is out of scope for this document.
    </t>

    <t>
      Then, the UA will send a new REGISTER request (F3) and include the
      authorization code in the body of the request with the following parameters:
    </t>

    <t>
      grant_type (REQUIRED)
      <list><t>Value MUST be set to "authorization_code".</t></list>
    </t>

    <t>
      code (REQUIRED)
      <list><t>The authorization code received from the authorization server.</t></list>
    </t>

    <t> <vspace blankLines="99" /> </t>


    <t>
      The proxy then contacts the Authorization Server and exchanges the
      authorization code for ID token, access token, and refresh token. The method
      used by the UA to obtain the tokens is out of scope for this document.
    </t>

    <t>
      If the proxy is successful in exchanging the authorization code with
      the tokens, the proxy then responds with 200 OK (F4) to the UA to
      complete the registration process.
    </t>

    <t> <vspace blankLines="1" /> </t>

    </section> <!-- Registration -->


    <section title="Shared-Key" anchor="shared.ey">

    <t>
      After sending the 200 OK to the UA to complete the registration
      process, the proxy and the UA use the HMAC-SHA256(key, message) to
      calculates the shared-key associated with this user as follows:
    </t>

    <t>
      key
      <list><t>The authorization code obtained from the Authorization Server.</t></list>
    </t>

    <t>
      message
      <list><t>The concatenation of the 'from-tag', 'to-tag', and 'call-id' of the
               200 OK that completes the registration process.</t></list>
    </t>

    <t> <vspace blankLines="1" /> </t>

    <t>
      This shared-key will be used to allow the UA to re-register to the proxy,
      in case of a connection lost to the proxy, without the need to obtain a
      new code or prompt the user for his credentials.
    </t>

    <t> <vspace blankLines="1" /> </t>
    </section> <!-- Shared-Key -->


    <section title="Re-Registration Requests" anchor="re-registration.requests">

    <t>
      When the UA loses its connection to the proxy and it wants to send a new
      registration request to the proxy, the UA will send a new REGISTER request
      and include the proof-of-possession (pop) of the shared-key in the body of
      the request:
    </t>

    <t>
      grant_type (REQUIRED)
      <list><t>Value MUST be set to "proof_of_possession".</t></list>
    </t>

    <t>
      pop (REQUIRED)
      <list><t>The pop calculated the first time the UA registered with the proxy.</t></list>
    </t>

    <t> <vspace blankLines="99" /> </t>

    <t>
      The pop is calculated using the shared-key as follows:
      <list><t>pop = HMAC-SHA256(shared-key, digest-string)</t></list>
    </t>

    <t>
      See rfc4474, section 9, for the SIP headers to hash to create digest-string.
    </t>

    <t>
      [[OPEN ISSUE]] Should this be not limited to re-registration, and instead
      be used with all subsequent requests?
    </t>

    <t> <vspace blankLines="1" /> </t>

    </section> <!-- Re-registration Requests -->


    <section title="Token Refresh" anchor="token.refresh">

    <t>
      Before the tokens expire, the proxy makes a refresh request to the
      Authorization Server to try to obtain new tokens. The method
      used by the UA to refresh the tokens is out of scope for this document.
    </t>

    <t>
      If the proxy fails to refresh the tokens, then it MUST challenge the
      next request from the UA, and as a result the UA MUST go through the
      authorization process again.
    </t>

    <t> <vspace blankLines="99" /> </t>

    </section> <!-- Token Refresh -->

    </section> <!-- Public UA with Rich UI -->


    <section title="Public UA with Limited UI" anchor="public.ua.with.limited.ui">

    <t>
      The following figure provides a high level view of flow of messages
      for the user authentication using a Public UA that has a limited UI that cannot
      prompt the user for his credentials.
    </t>

    <t>
      This use case requires the user to use his browser to authenticate to
      the Authorization Server and obtain a short lived numeric authorization
      code that would be used by the phone to register with the SIP proxy.
    </t>


<figure><artwork>
<![CDATA[

User                            Proxy                   Authorization
Agent                                                          Server
---------------------------------------------------------------------
  |                               |                               |
The UA collects the numeric code from the user through the key-pad|
  |                               |                               |
  |                               |                               |
  | F1 REGISTER [code]            |                               |
  |------------------------------>|                               |
  |                               |                               |
  |                               | The proxy will then use the   |
  |                               | authz code to obtain an access|
  |                               | token and refresh token       |
  |                               |<----------------------------->|
  |                               |                               |
  |                     F2 200 OK |                               |
  |<------------------------------|                               |
  |                               |                               |

]]>
</artwork></figure>

    <section title="Registration" anchor="limited.ui.registration">

    <t>
      The UA will send a REGISTER request (F1) and include the code in the
      body of the request with the following parameters:
    </t>

    <t>
      grant_type (REQUIRED)
      <list><t>Value MUST be set to "authorization_code".</t></list>
    </t>

    <t>
      code (REQUIRED)
      <list><t>The code received from the authorization server through the browser.</t></list>
    </t>

    <t> <vspace blankLines="99" /> </t>

    <t>
      The proxy then contacts the Authorization Server and exchanges the
      authorization code for ID token, access token, and refresh token. The method
      used by the UA to obtain the tokens is out of scope for this document.
    </t>

    <t>
      If the proxy is successful in exchanging the authorization code with
      the tokens, the proxy then responds with 200 OK (F2) to the UA to
      complete the registration process.
    </t>

    <t> <vspace blankLines="1" /> </t>
    </section> <!-- Registration -->


    <section title="Shared-Key" anchor="limited.ui.shared.ey">

    <t>
      After sending the 200 OK to the UA to complete the registration
      process, the proxy and the UA use the HMAC-SHA256(key, message) to
      calculates the shared-key associated with this user as follows:
    </t>

    <t>
      key
      <list><t>The authorization code obtained from the Authorization Server.</t></list>
    </t>

    <t>
      message
      <list><t>The concatenation of the 'from-tag', 'to-tag', and 'call-id' of the
               200 OK that completes the registration process.</t></list>
    </t>

    <t> <vspace blankLines="1" /> </t>

    <t>
      This shared-key will be used to allow the UA to re-register to the proxy,
      in case of a connection lost to the proxy, without the need to obtain a
      new authorization code.
    </t>

    <t> <vspace blankLines="1" /> </t>
    </section> <!-- Shared-Key -->


    <section title="Token Refresh" anchor="limited.ui.token.refresh">

    <t>
      Before the tokens expire, the proxy makes a refresh request to the
      Authorization Server to try to obtain new tokens. The method
      used by the UA to refresh the tokens is out of scope for this document.
    </t>

    <t>
      If the proxy fails to refresh the tokens, then it MUST challenge the
      next request from the UA, and as a result the UA MUST go through the
      authorization process again.
    </t>

    <t> <vspace blankLines="99" /> </t>

    </section> <!-- Token Refresh -->

    <section title="Re-Registration Requests" anchor="limited.ui.re-registration.requests">

    <t>
      When the UA loses its connection to the proxy and it wants to send a new
      registration request to the proxy, the UA will send a new REGISTER request
      and include the proof-of-possession (pop) of the shared-key in the body of
      the request:
    </t>

    <t>
      grant_type (REQUIRED)
      <list><t>Value MUST be set to "proof_of_possession".</t></list>
    </t>

    <t>
      pop (REQUIRED)
      <list><t>The pop calculated the first time the UA registered with the proxy.</t></list>
    </t>

    <t> <vspace blankLines="2" /> </t>

    <t>
      The pop is calculated using the shared-key as follows:
      <list><t>pop = HMAC-SHA256(shared-key, digest-string)</t></list>
    </t>

    <t>
      See rfc4474, section 9, for the SIP headers to hash to create digest-string.
    </t>

    <t>
      [[OPEN ISSUE]] Should this be not limited to re-registration, and instead
      be used with all subsequent requests?
    </t>

    <t> <vspace blankLines="99" /> </t>

    </section> <!-- Re-registration Requests -->



    </section> <!-- Public UA with Limited UI -->

  </section> <!-- Authorization Code Grant type -->



  <section title="Authentication using the Resource Owner Password Credentials flow"
           anchor="authentication.owner.pass.flow">

    <t>
      The resource owner password credentials flow is used by a Confidential UA
      with rich UI to authenticate to a third-party IdP entity and to directly obtain
      tokens to be able to register and get service from the SIP network.
    </t>

    <t> <vspace blankLines="1" /> </t>


    <section title="Overview" anchor="oauth.implicit.grant.overview">

    <t>
      The following figure provides a high level view of flow of messages
      for the OAuth Resource Owner Password Credentials flow:
    </t>


<figure><artwork>
<![CDATA[

User                            Proxy                   Authorization
Agent                                                          Server
---------------------------------------------------------------------
  |                               |                               |
The UA contacts the authorization server and authenticates the    |
user, and as a result obtains an access and refresh tokens.       |
  |                               |                               |
  |<------------------------------------------------------------->|
  |                               |                               |
  |                               |                               |
  | F1 REGISTER Authorization: Bearer access_token=<access-token> |
  |------------------------------>|                               |
  |                               |                               |
  |                               | The proxy validates the token |
  |                               | Optional introspection step   |
  |                               |<----------------------------->|
  |                               |                               |
  |                     F2 200 OK |                               |
  |<------------------------------|                               |
  |                               |                               |

]]>
</artwork></figure>
    </section> <!-- Overview-->


    <section title="Registration" anchor="oauth.implicit.grant.registration">

      <t>
        The UA first contacts the Authorization Server to authenticate the user and
        obtain tokens to be used to get access to the SIP network. The method used
        by the UA to obtain the tokens is out of scope for this document.
      </t>

      <t> <vspace blankLines="99" /> </t>

      <t>
        The UA starts the registration process with the SIP proxy by sending
        a REGISTER request (F1) with the access token it obtained previously.
      </t>

      <t>
        The UA includes an Authorization header field with the Bearer
        scheme in the request to carry the access token obtained previously.
      </t>

      <t>
        The proxy then validates the token, and MAY perform an introspection
        step to get more information about the token and its scope. The
        introspection step is out of scope for this document.
      </t>

      <t>
        When the proxy is satisfied with the token, it then replies with the 200 OK
        to complete the registration process.
      </t>

      <t> <vspace blankLines="1" /> </t>

    </section> <!-- Registration -->

    <section title="Subsequent Requests" anchor="oauth.implicit.grant.subsequent.requests">
      <t>
        All subsequent requests from the UA MUST include a valid access token. The UA
        MUST obtain a new access token before the access token expiry period
        to continue to get service from the system.
      </t>

    <t> <vspace blankLines="1" /> </t>
    </section> <!-- Subsequent Requests -->



  </section> <!-- Implicit Grant -->

  <section title="Authorization Header Syntax" anchor="authorization.header.syntax">

    <t>
      This section describes the syntax of the authorization header with the Bearer scheme.

  <figure><artwork>
  <![CDATA[
    Authorization = "Authorization" HCOLON "Bearer" LWS
                    "access_token" EQUAL access_token
    access-token = quoted-string
  ]]>
  </artwork></figure>
  </t>


    <t> <vspace blankLines="99" /> </t>
  </section> <!-- Authorization Header Syntax -->



  <section title="Security Considerations" anchor="security.considerations">
  <t>
    <figure><artwork>
      <![CDATA[   <Security considerations text> ]]>
    </artwork></figure>
  </t>
  </section> <!-- Security Considerations -->



  <section title="IANA Considerations" anchor="iana.considerations">
  <t>
    <figure><artwork>
      <![CDATA[   <IANA considerations text> ]]>
    </artwork></figure>
  </t>
  </section> <!-- IANA Considerations -->


  <section title="Acknowledgments" anchor="acknowledgments">
  <t>
    <figure><artwork>
      <![CDATA[   <Acknowledgments text> ]]>
    </artwork></figure>
  </t>
  </section> <!-- Acknowledgments -->

</middle>



<!-- ********************************** BACK ********************************** -->
<back>

  <references title="Normative References">

    <reference anchor="RFC2119">
      <front>
        <title abbrev="RFC Key Words">Key words for use in RFCs to Indicate Requirement Levels</title>
        <author initials="S." surname="Bradner" fullname="Scott Bradner" />
        <date month="March" year="1997" />
      </front>
      <seriesInfo name="BCP" value="14" />
      <seriesInfo name="RFC" value="2119" />
    </reference>

    <reference anchor="RFC3261">
      <front>
        <title abbrev="SIP">SIP: Session Initiation Protocol</title>
        <author initials="J." surname="Rosenberg" fullname="Jonathan Rosenberg" />
        <author initials="H." surname="Schulzrinne" fullname="Henning Schulzrinne" />
        <author initials="H." surname="Camarillo" fullname="Gonzalo Camarillo" />
        <author initials="A." surname="Johnston" fullname="Alan Johnston" />
        <author initials="J." surname="Peterson" fullname="Jon Peterson" />
        <author initials="R." surname="Sparks" fullname="Robert Sparks" />
        <author initials="M." surname="Handley" fullname="Mark Handley" />
        <author initials="E." surname="Schooler" fullname="Eve Schooler" />
        <date month="June" year="2002" />
      </front>
      <seriesInfo name="RFC" value="3261" />
    </reference>

    <reference anchor="RFC6749">
      <front>
        <title abbrev="OAuth 2.0">The OAuth 2.0 Authorization Framework</title>
        <author initials="D." surname="Hardt" fullname="Dick Hardt" />
        <date month="October" year="2012" />
      </front>
      <seriesInfo name="RFC" value="6749" />
    </reference>

    <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>

    <reference anchor="MITKB">
      <front>
        <title abbrev="MITKB">IdP (Identity Provider)</title>
        <author initials="MIT" surname="" fullname="" />
        <date month="March" year="2011" />
      </front>
      <seriesInfo name="MIT Knowledge Base," value="http://kb.mit.edu/confluence/x/XoK2" />
    </reference>

    <reference anchor="RFC7662">
      <front>
        <title abbrev="Introspection">OAuth 2.0 Token Introspection</title>
        <author initials="J." surname="Richer" fullname="Justin Richer" />
        <date month="October" year="2015" />
      </front>
      <seriesInfo name="RFC" value="7662" />
    </reference>

  </references>

</back>


</rfc>
