<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "http://xml.resource.org/authoring/rfc2629.dtd">
<?xml-stylesheet type='text/xsl' href='http://xml.resource.org/authoring/rfc2629.xslt' ?>
<rfc category="std" docName="draft-sakimura-oauth-wmrm-01" ipr="trust200902">
  <?rfc toc="yes"?>
  <?rfc tocompact="yes"?>
  <?rfc tocdepth="3"?>
  <?rfc tocindent="yes"?>
  <?rfc symrefs="yes"?>
  <?rfc sortrefs="yes"?>
  <?rfc comments="yes"?>
  <?rfc inline="yes"?>
  <?rfc compact="yes"?>
  <?rfc subcompact="no"?>
  <?rfc strict="no"?>

  <front>
    <title abbrev="oauth-wmrm">OAuth 2.0 Web Message Response Mode</title>

	<author fullname="Toru Yamaguchi" initials="T." surname="Yamaguchi">
	  <organization>Timee, Inc.</organization>
	  <address>
		<email>toru.yamaguchi@timee.co.jp</email>
		<uri>https://corp.timee.co.jp/</uri>
	  </address>
	</author>
    
    <author fullname="Nat Sakimura" initials="N." role="editor"
            surname="Sakimura">
      <organization>NAT Consulting LLC</organization>

      <address>
        <email>nat@nat.consulting</email>
        <uri>http://nat.sakimura.org/</uri>
      </address>
    </author>

	<author fullname="Nov Matake" initials="N." surname="Matake">
	  <organization>YAuth.JP LLC</organization>
	  <address>
		<email>nov@matake.jp</email>
		<uri>http://matake.jp</uri>
	  </address>
	</author>

    <date day="8" month="Nov" year="2023"/>

    <area>Security</area>

    <workgroup>OAuth Working Group</workgroup>

    <keyword>RFC</keyword>
    <keyword>Request for Comments</keyword>
    <keyword>I-D</keyword>
    <keyword>Internet-Draft</keyword>
    <keyword>Assertion</keyword>
    <keyword>Claim</keyword>
    <keyword>Security Token</keyword>
    <keyword>OAuth</keyword>
    <keyword>JavaScript Object Notation</keyword>
    <keyword>JSON</keyword>
    <keyword>JSON Web Token</keyword>
    <keyword>JWT</keyword>
    <keyword>JSON Web Signature</keyword>
    <keyword>JWS</keyword>
    <keyword>JSON Web Encryption</keyword>
    <keyword>JWE</keyword>

    <abstract>
      <t>This specification defines a new response mode for RFC6749 
      that uses HTML5 Web Messaging (a.k.a window.postMessage()) 
      instead of the redirect 
      for the Authorization Response from the Authorization Endpoint. 
      It defines two modes: simple mode and relay mode. 
      Relay mode can be used to protect the access token 
      in the implicit grant case by confining it within the 
      origins of authorization server or resource server 
      and preventing it from being read by the client. 
      </t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction">
      <t>This specification defines a new response mode for RFC6749 
      that uses HTML5 Web Messaging (a.k.a window.postMessage()) 
      instead of the redirect 
      for the Authorization Response from the Authorization Endpoint. 
      </t>
      <t>This specification provides two modes </t>


      <t><list style="numbers">
          <t>Simple mode returns the Authorization Response 
          directly to the client web page. </t>

          <t>Relay mode does not return the Authorization Response
          directly to the client web page but returns it 
          to a child frame created by the client web page 
          via the client web page. </t>
		  
        </list></t>



      <section title="Requirements Language">
        <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">RFC 2119</xref>.</t>
      </section>
    </section>

    <section title="Terms and definitions">
      <t>For the purposes of this specification, the following terms and
      definitions apply.</t>

      <section anchor="main_window" title="Main Window">
        <t>window object that the client created</t>
      </section>

      <section anchor="authenticated_window" title="Authenticated Window">
        <t>A window object in the iframe created by the 
        Main Window(<xref target="main_window" />)
        or its child iframe. </t>
        <t>It is 
        used to relay the Authorization Request 
        from the client to the Authorization Server. 
        The request is expected to have prompt=none defined 
        in OpenID Connect Core. </t>
        <t>It is expected to be used when the End User is in 
        the "authenticated" state at the Authorization Server 
        so that prompt=none succeeds. 
        Authorization Server SHOULD NOT send Set-Cookie header 
        in the response. </t>
      </section>
      <section anchor="unauthenticated_window" title="Unauthenticated Window">
        <t>A popup window object created by the 
        Main Window(<xref target="main_window" />), via window.open(),
        to send the Authorization Request to the 
        Authorization Endpoint.  </t>
		<t>It is used when the user is not in the Authenticated state 
		on the Authorization Server or the client has not 
		received the authorization yet. </t>
      </section>
      <section anchor="msg_t_win" title="Message Targeted Window">
        <t>A window object in the iframe created by the 
        Main Window(<xref target="main_window" />) that receives 
        Authorization Response in 
        Relay Mode (<xref target="relay_mode" />). 
        </t>
      </section>

    </section>
	<section anchor="sym_ab" title="Symbols and abbreviated terms">
	  <t>
		<list style="hanging">
			<t hangText="Authz">Authorization</t>
		</list>
	  </t>
	</section>
    

    <section anchor="protocol_flow" title="Protocol Flows">
	  <t>As stated above, this response mode provides two  
	  modes. </t>
	  
	  <section anchor="simple_mode" title="Simple mode">
	    <t>In the Simple mode, the protocol flows as follows. </t>
	    <section anchor="simple_mode_au" title="Simple mode:no prompt">
	    <t>The authorization request and response 
		sequence when using Authenticated Window will be like this. </t>

	    <figure anchor="fig_seq_au" title="Simple mode (Authenticated Window)">
	      <artwork><![CDATA[
           1.Create                   2.Authz                  
+--------+   iframe  +---------------+ Request  +--------------+
|        +----------->               +---------->              |
| Main   |           |Authenticated  |          |Authorization |
| Window |           |Window         |          |Endpoint      |
|        <-----------+               <----------+              |
+--------+ 3.Send    +---------------+ 3.Authz  +--------------+
             web message               Response                 
             as Authz                  via JavaScript code      
             Response                                           

	      ]]></artwork>
	    </figure>
		<t>Below is the description of the each steps in the 
		above sequence diagram. </t>
		<t><list style="numbers">
			<t>Main Window creates the Unauthenticated Windows 
			as an iframe to send Authorization Request and 
			sets the URI of the Authorization Request as the 
			src value of the iframe. </t>
			
			<t>The Authorization Request that is specified 
			by the src value of the iframe of the Unauthenticated Window, 
			which was set by the Main Window, 
			is sent to Authorization Endpoint. </t>
			
			<t>Authorization Server determines if the End User is 
			logged in state and checks if it can return 
			the Authorization Response without interacting with the User. 
			If it determines that it can, 
			it will render the HTML5 that includes the JavaScript code 
			that sends the Authorization Response. </t>
			
			<t>The Authorization Response is passed to the Main Window 
			from the Unauthenticated Window using Web Message 
			through the JavaScript. </t>
			
		</list></t>
		</section>
		<section anchor="simple_mode_un" title="Simple mode:with prompt">
		<t>When using Unauthenticated Window, the Authorization 
		sequence would be as follows: </t>
	    <figure anchor="fig_seq" title="Simple mode (Unauthenticated Window)">
	      <artwork><![CDATA[
           1.window.open()            2.Authz                                   
+--------+           +---------------+ Request  +--------------+                 
|        +----------->               +---------->              +-----+           
| Main   |           |Unauthenticated|          |Authorization |     |3.User     
| Window |           |Window         |          |Endpoint      |     |Interaction
|        <-----------+               <----------+              <-----+           
+--------+ 5.Send    +---------------+ 4.Authz  +--------------+                 
             web message               Response                                  
             as Authz                  via JavaScript code                       
             Response                                                            

	      ]]></artwork>
	    </figure>
		<t>
		It is almost identical to the sequence 
		that used Authenticated Window except: 
		</t>
		<t><list style="numbers">
			<t>The way the window object that 
			is used to send the Authorization Request 
			is different. i.e., iframe v.s. window.open(). 
			</t>
			<t>End User may interact with the Authorization Server 
			before the Authorization Response is being sent. 
			</t>
			<t>The relationship of the window that accesses 
			the Authorization Endpoint and the Main Window is 
			different. i.e., window.parent v.s. window.opener. </t>
		</list></t>
		</section>
	  </section>
 	  <section anchor="relay_mode" title="Relay Mode">
		<t>The protocol flow of the Relay mode will be as follows. </t>
		<section anchor="relay_mode_au" title="Relay mode:no prompt">
		<t>The authorization sequence that uses 
		Unauthenticated Window will be: </t>
		<figure anchor="f_relay_mode_au" title="Relay Mode (Authenticated Window)">
	      <artwork><![CDATA[
           +-----------------------+                                  
           |                       |                                  
   +-------> Message Target Window <-------+                          
   |       |                       |       |                          
   |       +-----------------------+  7.Send web message as           
1.Create iframe                         Authz Response                
   |                                       |                          
+--+-----+    2.Create iframe   +--------+-----+         +---------+
|        +----------------------> Un-          +--------->         |
| Main   |                      | Authenticated| 3.Authz | Authz   |
| Window <----------------------+ Window       | Request | Endpoint|
|        | 5.Send web message   |              |         |         |
+------+-+   as Relay Request   +--^-------^---+         +---+-----+
       |                           |       |                 |      
       +---------------------------+       +-----------------+      
                6.Relay Response             4.Authz Response       
                                               by Javascript code     
 
	      ]]></artwork>
	    </figure>
		<t><list style="numbers">
			<t>Create iframe (Message Target Window) 
			through Main Window. It will receive 
			the Authorization Response. </t>
			<t>Create iframe (Unautenticated Window) 
			through Main Window. 
			The Authorization Request URI is set as the 
			src value of the iframe. 
			This iframe is used to send the Authorization Request. 
			</t>
			<t>Authorization Request specified in the src value 
			by the Main Window 
			is sent to the Authorization Endpoint. </t>
			<t>Authorization Server checks the login status 
			of the End User and whether it can return the 
			Authorization Response without the End User interaction. 
			If it is, then it will render the HTML5 that 
			includes JavaScript code that sends 
			Relay Request and Authorization Response. </t>
			<t>Unauthenticated Window sends 
			Relay Request as a Web Message to the Main Window 
			throught the JavaScript code. </t>
			<t>Main Window returns the Relay Response. </t>
			<t>Unauthenticated window obtains the 
			window object of the Message Target Window 
			via the MessageEvent object in the 
			Relay Response and send Authorization Response 
			as a Web Message. </t>
		</list></t>
		</section>
		<section anchor="relay_mode_un" title="Simple mode:with prompt">
		<t>The authorization sequence that uses the 
		Authenticated Window follows almost the same sequence. </t>
		<figure anchor="f_relay_mode_un" title="Relay Mode (Authenticated Window)">
	      <artwork><![CDATA[
           +-----------------------+                                  
           |                       |                                  
   +-------> Message Target Window <-------+                          
   |       |                       |       |                          
   |       +-----------------------+  7.Send web message as           
1.window.open()                         Authz Response                
   |                                       |                          
+--+-----+    2.Create iframe   +--------+-----+         +---------+
|        +----------------------> Un-          +--------->         +---+
| Main   |                      | authenticated| 3.Authz | Authz   |   |3.User
| Window <----------------------+ Window       | Request | Endpoint|   |Interaction
|        | 5.Send web message   |              |         |         <---+
+------+-+   as Relay Request   +--^-------^---+         +---+-----+
       |                           |       |                 |      
       +---------------------------+       +-----------------+      
                6.Relay Response             4.Authz Response       
                                             by Javascript code     
 
	      ]]></artwork>
	    </figure>
		<t>The differences are, just like in the Simple Mode: </t>
		<t><list style="numbers">
			<t>The way the window object that 
			is used to send the Authorization Request 
			is different. i.e., iframe v.s. window.open(). 
			</t>
			<t>End User may interact with the Authorization Server 
			before the Authorization Response is being sent. 
			</t>
			<t>The relationship of the window that accesses 
			the Authorization Endpoint and the Main Window is 
			different. i.e., window.parent v.s. window.opener. </t>
		</list></t>		
		</section>
 	  </section>
 	 </section>
 	<section anchor="authz" title="Authorization">
 	  <t>  </t>
 	  <section anchor="authz_f" title="Authorization Request">
	  <t>Web Messaging Response Mode defines the following 
	  Authorization Request parameters. </t>
		<t><list style="hanging">
			<t hangText="response_mode">REQUIRED. 
			ASCII string "web_message". 
			</t>
			<t hangText="redirect_uri">REQUIRED.
			The origin URI of the URI of the Main Window. 
			If web_message_uri is not specified, 
			Authorization Responsewill be sent to the 
			origin specifed by the redirect_uri. 
			</t>
			<t hangText="web_message_uri">OPTIONAL. 
			The origin URI that Message Target Window references. 
			When it is specified, Authorization Response 
			will not be returned to the redirect_uri but 
			Relay Request/Responses are used. 
			</t>
			<t hangText="web_message_target">OPTIONAL or REQUIRED. 
			The DOM id value that points to the 
			Message Target Window. 
			REQUIRED if web_message_uri is used. 
			Authorization Response obtains the window object of 
			Message Target Window via 
			Relay Request/Relay Response with the Main Window. 
			If it is not specified, Authorization Responsewill be 
			sent to the calling window. 
			</t>
		</list></t>
	  <t>
	  Main WIndow creates an event listener before sending the 
	  Authorization Request, and sends Authorization Request 
	  that uses these parameters to either 
	  Authenticated Window or Unauthenticated Window. 
	  </t>
	  <t>The following example depicts the Authorization Request 
	  to the Unauthenticated Window in the Simple Mode. 
	  </t>
	  <figure anchor="f_e_un_simple" title="Registration of the event listener (Unauthenticated Window in the Simple mode)">
	    <preamble>	    </preamble>
	    <artwork><![CDATA[
function connect(request, callback) {
    var authorizationEndpoint = (function(url) {
        var a = document.createElement("a");
        a.setAttribute("href", url);
        return a;
    })("https://as.example.com/authorize");
    authorizationEndpoint.search = buildQueryString(request, {
        "redirect_uri": location.origin,
        "response_mode": "web_message"
    });
    window.addEventListener("message", function(evt) {
        if (evt.origin != "https://as.example.com")
            return;
        if (!evt.data.type)
            return;
        switch (evt.data.type) {
            case "authorization_response":
                evt.source.close();
                (evt.data.error) ? callback(null, evt.data): callback(evt.data, null);
                window.removeEventListener("message", arguments.callee, false);
                break;
            default:
        }
    }, false);
    var unauthentecatedWindow = window.open(authorizationEndpoint.getAttribute("href"), "_new");
    return unauthenticatedWindow;
}
]]></artwork>
	  </figure>
	  <t>Actual authorization request will look like: </t>
	  <figure anchor="f_authz_req" title="Authorization Request">
	    <preamble>	    </preamble>
	    <artwork><![CDATA[
GET /authorize?response_type=token&client_id=s6BhdRkqt3&state=xyz
 &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom
 &response_mode=web_message HTTP/1.1
Host: as.example.com:443
]]></artwork>
	    </figure>
      <t>Following depicts the Authorization Request to 
	  Authenticated Window in Relay Mode. 
	  </t>
	  <figure anchor="f_reg_e_relay_authn" title="Registration of the event listener 
	    that receives Authorization Response 
		(Authenticated Window in Relay Mode)">
	    <preamble></preamble>
	    <artwork><![CDATA[
function getConnectedStatus(request, callback) {
    var authorizationEndpoint = (function(url) {
        var a = document.createElement("a");
        a.setAttribute("href", url);
        return a;
    })("https://as.example.com/authorize");
    authorizationEndpoint.search = buildQueryString(request, {
        "redirect_uri": location.origin,
        "response_mode": "web_message",
        "web_message_uri": "https://api.example.com",
        "web_message_target": "apiFrame"
    });
    window.addEventListener("message", function(evt) {
        if (evt.origin != "https://as.example.com")
            return;
        if (!evt.data.type)
            return;
        switch (evt.data.type) {
            case "relay_request":
                evt.source.postMessage("message", {
                    type: "relay_response"
                }, false);
                (evt.data.error) ? callback(null, evt.data): callback(evt.data, null);
                window.removeEventListener("message", arguments.callee, false);
                break;
            default:
        }
    }, false);
    var authenticatedWindow = (function(url) {
        var iframe = document.getElementById("apiFrame");
        if (!iframe) {
            iframe = document.createElement("iframe");
            iframe.setAttribute("width", 0);
            iframe.setAttribute("height", 0);
        }
        iframe.setAttribute("href", url);
        return iframe.contentWindow;
    })(authorizationEndpoint.getAttribute("href"));
    return authenticatedWindow;
}
]]></artwork>
	    </figure>
	  <t>Actual authorization request will look like: </t>
	  <figure anchor="f_authz_req_1" title="Authorization Request (Authenticated Window)">
	    <preamble>
	      
	    </preamble>

	    <artwork><![CDATA[
GET /authorize?response_type=token&client_id=s6BhdRkqt3&state=xyz
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom
&response_mode=web_message
&web_message_uri=https%3A%2F%2Fapi%2Eexample%2Ecom
&web_message_target=apiFrame HTTP/1.1
Host: as.example.com:443
]]></artwork>
	    </figure>
		<t>Message Target Window in Relay mode creates an 
		event listener to receive Authorization Response. 
		</t>
	  <figure anchor="f_recv_ar_mtw" title="Receiving Authorization Response in Message Target Window">
	    <preamble>
	       
	    </preamble>

	    <artwork><![CDATA[
(function(window, document, undefined) {
    window.addEventListener("message", function(evt) {
        if (evt.origin != "https://as.example.com")
            return;
        if (!evt.data.type)
            return;
        switch (evt.data.type) {
            case "authorization_response":
                if (evt.source.parent == evt.source) {
                    evt.source.close();
                }
                processAuthorizationResponse(evt.data);
                break;
            default:
        }
    }, false);
})(this, this.document);
]]></artwork>
	    </figure>
		<t>Web Messages between Authenticated Window or Unauthenticated Window 
		and Main Window or Message Target Window takes the following fields. 
		</t>
		<texttable anchor="table_wm" title="Web Messages Structure">
			<ttcol align='left'>field</ttcol>
			<ttcol align='left'>type</ttcol>
			<ttcol align='left'>required</ttcol>
			<ttcol align='left'>description</ttcol>
			<c>type</c>
			<c>string</c>
			<c>true</c>
			<c>prepare_authorization_response OR authorization_response</c>
			<c>response</c>
			<c>object</c>
			<c>false</c>
			<c>used when type=authorization_response</c>
			<postamble> </postamble>
		</texttable>
		<t>Type attribute values are described in the following table. </t>
		<texttable anchor="table_msr" title="Type attributes">
			<ttcol align='left'>mode</ttcol>
			<ttcol align='left'>sender</ttcol>
			<ttcol align='left'>receiver</ttcol>
			<ttcol align='left'>type</ttcol>
			<ttcol align='left'>description</ttcol>
			<c>Simple Mode</c>
			<c>Authenticated Window or Unauthenticated Window</c>
			<c>Main Window</c>
			<c>authorization_response</c>
			<c>response including Authorization Response</c>

			<c>Relay Mode</c>
			<c>Authenticated Window or Unauthenticated Window</c>
			<c>Main Window</c>
			<c>relay_request</c>
			<c>Request to get the reference to the window object of the Main Window</c>			
			
			<c>Relay Mode</c>
			<c>Main Window</c>
			<c>Authenticated Window or Unauthenticated Window</c>
			<c>relay_response</c>
			<c>The response to the relay_request</c>
			
			<c>Relay Mode</c>
			<c>Authenticated Window or Unauthenticated Window</c>
			<c>Message Target Window</c>
			<c>authorization_response</c>
			<c>Response that includes Authorization Response</c>	
			<postamble> </postamble>
		</texttable>		
	  </section>
	  <section anchor="authz_res" title="Authorization Response">
		<t>Authorization Server needs to render the 
		JavaScript code to return the Authorization Response 
		when response_mode was web_message at the time of 
		Authorization Request at Authorization Endpoint. </t>
		<t>Authorization Server MUST verify the following 
		before returning Authorization Response.</t>
		<t>
			<list style="format (%d)">
				<t>The origin specified by redirect_uri is white-listed. </t>
				<t>The origin specified by web_message_uri is white-listed.</t>
			</list>
		</t>
		<t>If verified, it MUST return the response including the 
		JavaScript code such as: </t>
		<figure anchor="f_arwmrm" title="Authorization Response with web messaging response mode">
			<artwork>
			<![CDATA[
<!DOCTYPE html>
<html>

<head>
    <title>Authorization Response</title>
</head>

<body>
    <script type="text/javascript">
        (function(window, document, undefined) {
                // Begin : these values rendered by server
                var redirectURI = "https://client.example.com";
                var webMessageRequest = {};
                var authorizationResponse = {
                    type: "authorization_response",
                    response: {
                        code: "SplxlOBeZQQYbYS6WxSbIA",
                        state: "xyz"
                    }
                };
                // End
                var mainWin = (window.opener != window) ? window.opener : window.parent;
                // For relay mode
                if (webMessageRequest["web_message_uri"] && webMessageRequest["web_message_target"]) {
                    window.addEventListener("message", function(evt) {
                            if (evt.origin != redirectURI)
                                return; // replay mode
                            switch (evt.data.type) {
                                case "relay_response":
                                    messageTargetWindow =
                                        evt.source.document.getElementById(webMessageRequest["web_message_target"]);
                                    if (messageTargetWindow) {
                                        messageTargetWindow.postMessage({
                                            type: "authorization_response",
                                            response: authorizationResponse
                                        }, webMessageRequest["web_message_uri"]);
                                    }
                                default:
                            }
                        }
                        mainWin.postMessage({
                            type: "relay_request"
                        }, redirectURI);
                    } else {
                        mainWin.postMessage({
                            type: "authorization_response",
                            response: authorizationResponse
                        }, redirectURI);
                    }
                })(this, this.document);
    </script>
</body>

</html>
			]]>
			</artwork>
		</figure>
		<t>If web_message_uri and web_message_target 
		request parameters are specified in Authorization Request, 
		window object sent by postMessage() is not to be set to 
		window.opener or window.parent but to a specific frame, 
		responses such as follows should be returned. 
		</t>
		<figure anchor="f_arwmwmrm" title="Authorization Response w/ web messaging response mode and web_message_target">
			<artwork>
			<![CDATA[
<!DOCTYPE html>
<html>

<head>
    <title>Authorization Response</title>
</head>

<body>
    <script type="text/javascript">
        (function(window, document, undefined) {
                // Begin : these values rendered by server
                var redirectURI = "https://client.example.com";
                var webMessageRequest = {
                    web_message_uri: "https://api.example.com",
                    web_message_target: "apiFrame"
                };
                var authorizationResponse = {
                    type: "authorization_response",
                    response: {
                        code: "SplxlOBeZQQYbYS6WxSbIA",
                        state: "xyz"
                    }
                };
                // End
                var mainWin = (window.opener != window) ? window.opener : window.parent;
                // For relay mode
                if (webMessageRequest["web_message_uri"] && webMessageRequest["web_message_target"]) {
                    window.addEventListener("message", function(evt) {
                            if (evt.origin != redirectURI)
                                return; // replay mode
                            switch (evt.data.type) {
                                case "relay_response":
                                    messageTargetWindow =
                                        evt.source.document.getElementById(webMessageRequest["web_message_target"]);
                                    if (messageTargetWindow) {
                                        messageTargetWindow.postMessage({
                                            type: "authorization_response",
                                            response: authorizationResponse
                                        }, webMessageRequest["web_message_uri"]);
                                    }
                                default:
                            }
                        }
                        mainWin.postMessage({
                            type: "relay_request"
                        }, redirectURI);
                    } else {
                        mainWin.postMessage({
                            type: "authorization_response",
                            response: authorizationResponse
                        }, redirectURI);
                    }
                })(this, this.document);
    </script>
</body>

</html>
			]]>
			</artwork>
		</figure>
	  </section>
	</section>
	
	<section anchor="client_meta" title="Client Metadata">
		<t>The following field is added to RFC7519. </t>
		<texttable anchor="t_cl_meta" title="Client Metadata Addition">
			<ttcol align='left'>field</ttcol>
			<ttcol align='left'>type</ttcol>
			<ttcol align='left'>description</ttcol>
			<c>web_message_uris</c>
			<c>array</c>
			<c>List of origins that are allowed as web_message_uri in the Authorization Request. </c>
			<postamble> </postamble>
		</texttable>		
	</section>

    <section anchor="IANA" title="IANA  Considerations">
      <t>Followings are added to 
	  OAuth Dynamic Client Registration Metadata Registry. 
		<list style="symbols">
			<t>Client Metadata Name: "web_message_uris"</t>
			<t>Client Metadata Description: List of origins that are allowed as web_message_uri in the Authorization Request.</t>
			<t>Change Controller: IESG</t>
			<t>Specification Document(s): This document</t>
		</list>
	  </t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>In addition to the all <xref target="RFC6819">
      the security considerations discussed in OAuth 2.0</xref>, the following security considerations
      SHOULD be taken into account.</t>

      <t></t>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
	  <t>Follwoing people contributed to the creation of this document 
	  . </t>
	  
    </section>
	<section title="Revision History" anchor="hist">
		<t>-01</t><t>
			<list style="symbols">
				<t>Updated authors contacts</t>
			</list>
		</t>
									
		<t>-00</t>
		<t>
			<list style="symbols">
				<t>Initial Draft.</t>
			</list>
		</t>
	</section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119"?>
      <?rfc include='reference.RFC.6819'?>
	  <?rfc include='reference.RFC.7591'?>
	  <reference anchor="Web.Messaging">
        <front>
          <title>HTML5 Web Messaging</title>
          <author fullname="Ian Hickson" initials="I." surname="Hickson">
            <organization abbrev="Google">Google Inc.</organization>
          </author>
          <date day="19" month="May" year="2015"/>
        </front>
		<format target="http://www.w3.org/TR/webmessaging/" type="HTML" />
      </reference>
    </references>
  </back>
</rfc>
