<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en"><head><title>Draft: OpenID
    Assertion Quality Extension 1.0 - Draft 4</title>
<meta http-equiv="Expires" content="Tue, 28 Nov 2006 13:30:25 +0000">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="description" content="OpenID
    Assertion Quality Extension 1.0 - Draft 4">
<meta name="generator" content="xml2rfc v1.32pre2 (http://xml.resource.org/)">
<style type='text/css'><!--
        body {
                font-family: verdana, charcoal, helvetica, arial, sans-serif;
                font-size: small; color: #000; background-color: #FFF;
                margin: 2em;
        }
        h1, h2, h3, h4, h5, h6 {
                font-family: helvetica, monaco, "MS Sans Serif", arial, sans-serif;
                font-weight: bold; font-style: normal;
        }
        h1 { color: #900; background-color: transparent; text-align: right; }
        h3 { color: #333; background-color: transparent; }

        td.RFCbug {
                font-size: x-small; text-decoration: none;
                width: 30px; height: 30px; padding-top: 2px;
                text-align: justify; vertical-align: middle;
                background-color: #000;
        }
        td.RFCbug span.RFC {
                font-family: monaco, charcoal, geneva, "MS Sans Serif", helvetica, verdana, sans-serif;
                font-weight: bold; color: #666;
        }
        td.RFCbug span.hotText {
                font-family: charcoal, monaco, geneva, "MS Sans Serif", helvetica, verdana, sans-serif;
                font-weight: normal; text-align: center; color: #FFF;
        }

        table.TOCbug { width: 30px; height: 15px; }
        td.TOCbug {
                text-align: center; width: 30px; height: 15px;
                color: #FFF; background-color: #900;
        }
        td.TOCbug a {
                font-family: monaco, charcoal, geneva, "MS Sans Serif", helvetica, sans-serif;
                font-weight: bold; font-size: x-small; text-decoration: none;
                color: #FFF; background-color: transparent;
        }

        td.header {
                font-family: arial, helvetica, sans-serif; font-size: x-small;
                vertical-align: top; width: 33%;
                color: #FFF; background-color: #666;
        }
        td.author { font-weight: bold; font-size: x-small; margin-left: 4em; }
        td.author-text { font-size: x-small; }

        /* info code from SantaKlauss at http://www.madaboutstyle.com/tooltip2.html */
        a.info {
                /* This is the key. */
                position: relative;
                z-index: 24;
                text-decoration: none;
        }
        a.info:hover {
                z-index: 25;
                color: #FFF; background-color: #900;
        }
        a.info span { display: none; }
        a.info:hover span.info {
                /* The span will display just on :hover state. */
                display: block;
                position: absolute;
                font-size: smaller;
                top: 2em; left: -5em; width: 15em;
                padding: 2px; border: 1px solid #333;
                color: #900; background-color: #EEE;
                text-align: left;
        }

        a { font-weight: bold; }
        a:link    { color: #900; background-color: transparent; }
        a:visited { color: #633; background-color: transparent; }
        a:active  { color: #633; background-color: transparent; }

        p { margin-left: 2em; margin-right: 2em; }
        p.copyright { font-size: x-small; }
        p.toc { font-size: small; font-weight: bold; margin-left: 3em; }
        table.toc { margin: 0 0 0 3em; padding: 0; border: 0; vertical-align: text-top; }
        td.toc { font-size: small; font-weight: bold; vertical-align: text-top; }

        ol.text { margin-left: 2em; margin-right: 2em; }
        ul.text { margin-left: 2em; margin-right: 2em; }
        li      { margin-left: 3em; }

        /* RFC-2629 <spanx>s and <artwork>s. */
        em     { font-style: italic; }
        strong { font-weight: bold; }
        dfn    { font-weight: bold; font-style: normal; }
        cite   { font-weight: normal; font-style: normal; }
        tt     { color: #036; }
        tt, pre, pre dfn, pre em, pre cite, pre span {
                font-family: "Courier New", Courier, monospace; font-size: small;
        }
        pre {
                text-align: left; padding: 4px;
                color: #000; background-color: #CCC;
        }
        pre dfn  { color: #900; }
        pre em   { color: #66F; background-color: #FFC; font-weight: normal; }
        pre .key { color: #33C; font-weight: bold; }
        pre .id  { color: #900; }
        pre .str { color: #000; background-color: #CFF; }
        pre .val { color: #066; }
        pre .rep { color: #909; }
        pre .oth { color: #000; background-color: #FCF; }
        pre .err { background-color: #FCC; }

        /* RFC-2629 <texttable>s. */
        table.full, table.headers, table.none {
                font-size: small; text-align: center; border-width: 2px;
                vertical-align: top; border-collapse: collapse;
        }
        table.full { border-style: solid; border-color: black; }
        table.headers, table.none { border-style: none; }
        th {
                font-weight: bold; border-color: black;
                border-width: 2px 2px 3px 2px;
        }
        table.full th { border-style: solid; }
        table.headers th { border-style: none none solid none; }
        table.none th { border-style: none; }
        table.full td {
                border-style: solid; border-color: #333;
                border-width: 1px 2px;
        }
        table.headers td, table.none td { border-style: none; }

        hr { height: 1px; }
        hr.insert {
                width: 80%; border-style: none; border-width: 0;
                color: #CCC; background-color: #CCC;
        }
--></style>
</head>
<body>
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>
<table summary="layout" width="66%" border="0" cellpadding="0" cellspacing="0"><tr><td><table summary="layout" width="100%" border="0" cellpadding="2" cellspacing="1">
<tr><td class="header">Draft</td><td class="header">D. Recordon</td></tr>
<tr><td class="header">&nbsp;</td><td class="header">VeriSign</td></tr>
<tr><td class="header">&nbsp;</td><td class="header">A. Glasser</td></tr>
<tr><td class="header">&nbsp;</td><td class="header">VxV Solutions</td></tr>
<tr><td class="header">&nbsp;</td><td class="header">P. Madsen</td></tr>
<tr><td class="header">&nbsp;</td><td class="header">NTT</td></tr>
<tr><td class="header">&nbsp;</td><td class="header">November 28, 2006</td></tr>
</table></td></tr></table>
<h1><br />OpenID
    Assertion Quality Extension 1.0 - Draft 4</h1>

<h3>Abstract</h3>

<p>
        This extention to the OpenID Authentication protocol provides
        means for a Relying Party to request additional information
        about the specifics by which a user enrolled and/or
        authenticated to the OpenID Provider, as well as for an OpenID
        Provider to add such information into assertions. Such
        information may be necessary for use cases in which, for an RP
        to make an assesment of the quality of an assertion from a OP,
        the OP's identity is not on its alone sufficient (as might be
        the case were an OP capable of authenticating a user through
        various authentication mechanisms).
      
</p>
<p>
        While there are other aspects of lifecycle management that may
        bear on the resultant quality of an OpenID Authentication
        assertion - enrollment and authentication are generally the
        two characteristics that are most useful in distinguishing
        authentication quality. Consequently, we focus on these
        aspects here. We expect that other aspects (e.g. security
        characteristics, credential provisioning, etc) could be dealt
        with in the future.
      
</p>
<p>
        As an extension, it requires no changes to either the Yadis
        protocol or the OpenID Authentication protocol and is viewed
        as an optional extension though its use is certainly
        recommended.
      
</p>
<p>
        We acknowledge that, while none of the information expressed
        via this extension can be verified by the Relying Party in a
        technological fashion, this need not be viewed as an
        issue. The lack of an inherent trust model within OpenID
        allows for Relying Parties to decide which OPs they trust
        using whatever criteria they choose - likewise RPs will decide
        whether or not to trust claims as to authentication quality
        from such OPs as well.
      
</p><a name="toc"></a><br /><hr />
<h3>Table of Contents</h3>
<p class="toc">
<a href="#anchor1">1</a>&nbsp;
Requirements Notation<br />
<a href="#anchor2">2</a>&nbsp;
Terminology<br />
<a href="#anchor3">3</a>&nbsp;
Extension Overview<br />
<a href="#anchor4">4</a>&nbsp;
Relation to SAML Authentication Context<br />
<a href="#advertising">5</a>&nbsp;
Advertising OP Policy<br />
&nbsp;&nbsp;&nbsp;&nbsp;<a href="#enroll_props">5.1</a>&nbsp;
Supported Enrollment Properties<br />
&nbsp;&nbsp;&nbsp;&nbsp;<a href="#anchor5">5.2</a>&nbsp;
Supported Authentication Properties<br />
<a href="#anchor6">6</a>&nbsp;
Authentication Protocol<br />
&nbsp;&nbsp;&nbsp;&nbsp;<a href="#anchor7">6.1</a>&nbsp;
Request Parameters<br />
&nbsp;&nbsp;&nbsp;&nbsp;<a href="#anchor8">6.2</a>&nbsp;
Response Parameters<br />
<a href="#anchor9">7</a>&nbsp;
Security Considerations<br />
<a href="#anchor10">8</a>&nbsp;
To-Do List<br />
<a href="#anchor11">9</a>&nbsp;
Examples<br />
&nbsp;&nbsp;&nbsp;&nbsp;<a href="#anchor12">9.1</a>&nbsp;
XRDS Document<br />
<a href="#rfc.references1">10</a>&nbsp;
Normative References<br />
<a href="#rfc.authors">&#167;</a>&nbsp;
Authors' Addresses<br />
</p>
<br clear="all" />

<a name="rfc.section.1"></a><h4><a name="anchor1">1</a>&nbsp;
Requirements Notation</h4>

<p>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 <a class='info' href='#RFC2119'>[RFC2119]<span> (</span><span class='info'>Bradner, B., &ldquo;Key words for use in RFCs to Indicate Requirement Levels,&rdquo; ?.</span><span>)</span></a>.
</p>
<a name="rfc.section.2"></a><h4><a name="anchor2">2</a>&nbsp;
Terminology</h4>

<p>
        The following terms are defined in
        <a class='info' href='#OpenIDAuthentication2.0'>[OpenIDAuthentication2.0]<span> (</span><span class='info'>Recordon, D., Hoyt, J., Hardt, D., and B. Fitzpatrick, &ldquo;OpenID Authentication 2.0 - Draft 10,&rdquo; 2006.</span><span>)</span></a>:
      
</p>
<p>
        </p>
<ul class="text">
<li>Identifier
</li>
<li>Relying Party (RP)
</li>
<li>OpenID Provider (OP)
</li>
</ul><p>
      
</p>
<a name="rfc.section.3"></a><h4><a name="anchor3">3</a>&nbsp;
Extension Overview</h4>

<p>
        </p>
<ol class="text">
<li>
            End Users and OPs advertise both enrollment policy and
            supported authentication methods via Yadis.
          
</li>
<li>
            Based on Yadis advertisements, the Relying Party includes
            parameters in the OpenID Authentication request describing
            its preferences for enrollment and authentication policy
            for any subsequent assertions.
          
</li>
<li>
            The OpenID Provider responds to the Authentication request
            with an assertion - supplemented with information about
            the enrollment and authentication policies under which the
            assertion was issued. The RP will take this information as
            input into its assessment of the quality of the assertion.
          
</li>
</ol><p>
      
</p>
<a name="rfc.section.4"></a><h4><a name="anchor4">4</a>&nbsp;
Relation to SAML Authentication Context</h4>

<p>
       The Security Assertion Markup Language (SAML) Authentication
       Context (<a class='info' href='#SAMLAC'>[SAMLAC]<span> (</span><span class='info'>Kemp, J., &ldquo;SAML 2.0 Authentication Context,&rdquo; 2005.</span><span>)</span></a> defines mechanisms by which
       SAML Service Providers and OpenID Providers can discuss the
       context of an authentication assertion.
      
</p>
<p>
       The authors acknowledge the similar motivation between SAML's
       Authentication Context and this extension. Where possible, we
       have attempted to stay aligned with the SAML Authentication
       Context model. Indeed, we see this topic as a likely area of
       convergence between OpenID and SAML. More work is needed here.
      
</p>
<a name="rfc.section.5"></a><h4><a name="advertising">5</a>&nbsp;
Advertising OP Policy</h4>

<p>
        Via the use of <a class='info' href='#Yadis'>[Yadis]<span> (</span><span class='info'>Miller, J., &ldquo;Yadis Specification 1.0,&rdquo; 2005.</span><span>)</span></a> within OpenID, Relying
        Parties are able to discover OpenID Provider service
        information in an automated fashion.  This is used within
        OpenID Authentication for a RP to discover what version of the
        protocol each OP listed supports as well as any extensions,
        such as this one, that are supported. To aide in the process
        of a Relying Party selecting which OP they wish to interact
        with, it is advised that the following information be added to
        the End User's XRDS document.
      
</p>
<p>
        It should be noted that implementors can add additional
        parameters to describe other attributes that can be verified
        during the enrollment process or properties of a specific
        authentication request. The following are meant as
        examples of what we feel are a reasonable baseline when
        looking at solving this problem.
      
</p>
<p>
        The XML namespace SHALL be "http://openid.net/xmlns/aqe".
      
</p>
<a name="rfc.section.5.1"></a><h4><a name="enroll_props">5.1</a>&nbsp;
Supported Enrollment Properties</h4>

<p>
          The following are properties describing the mechanisms used
          by the OP policy at the time of enrollment (account
          creation) and, as such, do not change with each
          authentication request. In other words, they describe what
          has already happened, and not a capability for something to
          happen.
        
</p>
<p>
          For each property, the following values apply.  The value of
          "yes" means that the End User has successfully passed
          verification.  The value of "no" means that the user has not
          yet completed or has failed verification.  The value of "na"
          means that the OP has not tried this method of
          verification. If a particular property is not declared, the
          property does not need to be declared and will be treated as
          the "na" or "no" value.
        
</p>
<p>
          </p>
<blockquote class="text">
<p>enroll.verified.captcha
            </p>
<blockquote class="text">
<p>Did the OP present the End User with a CAPTCHA
              during the account creation process?
</p>
<p>Value: "yes" or "no"
</p>
</blockquote>
            

<p>enroll.verified.email
            </p>
<blockquote class="text">
<p>Did the OP verify any email address the End User
              provided during the account creation process?
</p>
<p>Value: "yes", "no" or "na"
</p>
</blockquote>
            

<p>enroll.verified.telephone
            </p>
<blockquote class="text">
<p>Did the OP verify any telephone number the End User
              provided during the account creation process?
</p>
<p>Value: "yes" or "no"
</p>
</blockquote>
            

</blockquote><p>
        
</p>
<a name="rfc.section.5.2"></a><h4><a name="anchor5">5.2</a>&nbsp;
Supported Authentication Properties</h4>

<p>
          The following are properties describing authentication requests. 
        
</p>
<p>user.authentication.methods
            </p>
<blockquote class="text">
<p>What authentication methods is the OP capable of
              authenticating the End User through?
</p>
<p>Value: Comma-delimited list of "none", "password",
              "pin", "fingerbio", "handbio", "hardotp", "irisbio",
              "otherbio", "smartcard", "softotp", "voicebio"
</p>
<p>If multiple methods are listed, no significance
              should be assigned to their order.  
</p>
<p>
                </p>
<blockquote class="text">
<p>none - represents that no authentication
                  operation is required for the OP to make a positive
                  assertion about this Identifier. 
</p>
<p>password -  
</p>
<p>pin -  
</p>
<p>fingerbio -  
</p>
<p>handbio -  
</p>
<p>irisbio -  
</p>
<p>voicebio -  
</p>
<p>otherbio -  
</p>
<p>smartcard -  
</p>
<p>softotp -  
</p>
</blockquote>
              

<p>
                OpenID actors are free to extend the above list as
                necessary. Care MUST be taken to ensure that any
                identifier for an authentication method will be
                recognized and interpreted appropriately.
              
</p>
</blockquote><p>
            
</p>
<a name="rfc.section.6"></a><h4><a name="anchor6">6</a>&nbsp;
Authentication Protocol</h4>

<a name="rfc.section.6.1"></a><h4><a name="anchor7">6.1</a>&nbsp;
Request Parameters</h4>

<p>
          During an OpenID Authentication 2.0 Request (Section 10),
          the following parameters can be included by the Relying
          Party to describe preferences for the particular
          authentication session.
        
</p>
<p>
          </p>
<ul class="text">
<li>openid.ns.aqe
            
<blockquote class="text">
<p>Value: "http://openid.net/extensions/aqe/1.0"
</p>
</blockquote>
            
</li>
<li>openid.aqe.max_auth_age
            
<blockquote class="text">
<p>If the End User has not actively authenticated to the
              OP within the number of seconds specified, the OP SHOULD
              authenticate the End User for this request.
</p>
<p>Value: Numeric value greater than or equal to zero in
              seconds.
</p>
<p>OP should realize that not adhering to the request
              for re-authentication means that the user will most
              likely not be allowed access to the RP.
</p>
</blockquote>
            
</li>
<li>openid.aqe.preferred_auth_mode
            
<blockquote class="text">
<p>Optional. The mode(s) of authentication the RP would
              like the OP to perform. The mode should match one of the
              advertised values in the XRDS.
</p>
<p>Value: Comma-delimited list of "none", "password", "pin",
              "fingerbio", "handbio", "hardotp", "irisbio", "otherbio",
              "smartcard", "softotp", "voicebio"
</p>
<p>Note: The OP should attempt to authenticate the user
              with the most secure mode requested.  For example, if
              the OP has determined that their voicebio method is
              stronger than their password method and the RP requests
              either "voicebio or password", the OP should strive to
              authenticate the user by "voicebio" when possible. If
              the two modes are considered equally strong, then it is
              the choice of the OP regarding which one or ones to
              authenticate against. OPs should note that
              authenticating a user by a non-preferred method may
              result in an RP denying access.
</p>
</blockquote>
            
</li>
</ul><p>
        
</p>
<a name="rfc.section.6.2"></a><h4><a name="anchor8">6.2</a>&nbsp;
Response Parameters</h4>

<p>
          In response to a Relying Party's request, the following
          parameters MUST be included in the OpenID Authentication 2.0
          Response (Section 11).  It is RECOMMENDED that an OP
          supporting this extension include the following parameters
          even if not requested by the Relying Party.
        
</p>
<p>
          </p>
<ul class="text">
<li>openid.ns.aqe
            
<blockquote class="text">
<p>Value: "http://openid.net/extensions/aqe/1.0"
</p>
</blockquote>
            
</li>
<li>openid.aqe.enrollment_verified
            
<blockquote class="text">
<p>Attributes verified by the OP during the End User's
              enrollment.
</p>
<p>Value: Comma-delimited list of "captcha", "email",
              "telephone".
</p>
<p>Note: These values correspond with those in <a class='info' href='#enroll_props'>Section&nbsp;5.1<span> (</span><span class='info'>Supported Enrollment Properties</span><span>)</span></a>.
</p>
</blockquote>
            
</li>
<li>openid.aqe.auth_mode
            
<blockquote class="text">
<p>Description of the mechanism by which the End User
              authenticated to to the OP for this request.
</p>
<p>Value: Comma-delimited list of "none", "password",
              "pin", "fingerbio", "handbio", "hardotp", "irisbio",
              "otherbio", "smartcard", "softotp", "voicebio"
</p>
</blockquote>
            
</li>
<li>openid.aqe.auth_age
            
<blockquote class="text">
<p>The number of seconds prior to this request that the
              End User authenticated to the OP using the mode
              specified in "openid.aqe.auth_mode".
</p>
<p>Value: Numeric value greater than or equal to zero in
              seconds.
</p>
</blockquote>
            
</li>
</ul><p>
        
</p>
<p>
          If the OP used more than one method to authenticate the End
          User for this request, it SHOULD be expressed to the RP in
          the response.  To do so, the OP MUST post-fix both
          "openid.aqe.auth_mode" and "openid.aqe.auth_age" with a
          numeric value starting at 1 and incrementing by one for each
          authentication method used.  Thus an OP using two
          authentication methods would include the following
          parameters in its response: "openid.aqe.auth_mode1",
          "openid.aqe.auth_age1", "openid.aqe.auth_mode2",
          openid.aqe.auth_age2".
        
</p>
<a name="rfc.section.7"></a><h4><a name="anchor9">7</a>&nbsp;
Security Considerations</h4>

<p>None known.
</p>
<a name="rfc.section.8"></a><h4><a name="anchor10">8</a>&nbsp;
To-Do List</h4>

<p>
        </p>
<ol class="text">
<li>
            Use an existing schema when referring to attributes such
            as email, telephone, etc.  This will also provide for the
            extension to be extensible by other parties.
          
</li>
<li>
            Define the XML namespace to be used in the XRDS document.
          
</li>
<li>
            Define the URI to represent this extension.
          
</li>
</ol><p>
      
</p>
<a name="rfc.section.9"></a><h4><a name="anchor11">9</a>&nbsp;
Examples</h4>

<p>Non-normative
</p>
<a name="rfc.section.9.1"></a><h4><a name="anchor12">9.1</a>&nbsp;
XRDS Document</h4>

<p>
          The following examples show how information in <a class='info' href='#advertising'>Section&nbsp;5<span> (</span><span class='info'>Advertising OP Policy</span><span>)</span></a> can be expressed.
        
</p>
<p>
          
<p>
              A 'weak' OP supporting only password based authentication 
              that presented a captcha upon enrollment and verified the
              End User's email address.
            
</p><div style='display: table; width: 0; margin-left: 3em; margin-right: auto'><pre>
&lt;xrds:XRDS xmlns:openidaqe="http://openid.net/xmlns/aqe"
xmlns:openid="http://openid.net/xmlns/1.0" xmlns:xrds="xri://$xrds"
xmlns="xri://$xrd*($v*2.0)"&gt;
    &lt;XRD&gt;
        &lt;Service&gt;
            &lt;Type&gt;http://openid.net/signon/2.0&lt;/Type&gt;
            &lt;Type&gt;http://openid.net/extensions/aqe/1.0&lt;/Type&gt;
            &lt;URI&gt;http://weakidp.example.com/openid/server&lt;/URI&gt;
            &lt;openidaqe:enroll.verified.captcha&gt;
                yes
            &lt;/openidaqe:enroll.verified.captcha&gt;
            &lt;openidaqe:enroll.verified.telephone&gt;
                no
            &lt;/openidaqe:enroll.verified.telephone&gt;
            &lt;openidaqe:enroll.verified.email&gt;
                yes
            &lt;/openidqe:enroll.verified.email&gt;
            &lt;openidaqe:user.authentication.methods&gt;
                password
            &lt;/openidaqe:user.authentication.methods&gt;
        &lt;/Service&gt;
    &lt;/XRD&gt;
&lt;/xrds:XRDS&gt;
</pre></div>
        

<p>
          
<p>
              A 'strong' OP supporting both hardotp and voice print
              biometric based authentication that presented a captcha
             but and verified the End User's email address  upon enrollment.
            
</p><div style='display: table; width: 0; margin-left: 3em; margin-right: auto'><pre>
&lt;xrds:XRDS xmlns:openidaqe="http://openid.net/xmlns/aqe"
xmlns:openid="http://openid.net/xmlns/1.0" xmlns:xrds="xri://$xrds"
xmlns="xri://$xrd*($v*2.0)"&gt;
    &lt;XRD&gt;
        &lt;Service&gt;
            &lt;Type&gt;http://openid.net/signon/2.0&lt;/Type&gt;
            &lt;Type&gt;http://openid.net/extensions/aqe/1.0&lt;/Type&gt;
            &lt;URI&gt;http://strongidp.example.com/openid/server&lt;/URI&gt;
            &lt;openidaqe:enroll.verified.captcha&gt;
                yes
            &lt;/openidaqe:enroll.verified.captcha&gt;
            &lt;openidaqe:enroll.verified.telephone&gt;
                no
            &lt;/openidaqe:enroll.verified.telephone&gt;
            &lt;openidaqe:enroll.verified.email&gt;
                yes
            &lt;/openidqe:enroll.verified.email&gt;
            &lt;openidaqe:user.authentication.methods&gt;
                hardotp,voicebio
            &lt;/openidaqe:user.authentication.methods&gt;
        &lt;/Service&gt;
    &lt;/XRD&gt;
&lt;/xrds:XRDS&gt;
</pre></div>
        

<p>
          
<p>
              A description of two seperate OPs, both the prior
              strong and weak examples.  This would allow the RP to
              choose the applicable OP for the particular
              authentication request.
            
</p><div style='display: table; width: 0; margin-left: 3em; margin-right: auto'><pre>
&lt;xrds:XRDS xmlns:openidaqe="http://openid.net/xmlns/aqe"
xmlns:openid="http://openid.net/xmlns/1.0" xmlns:xrds="xri://$xrds"
xmlns="xri://$xrd*($v*2.0)"&gt;
    &lt;XRD&gt;
       &lt;Service&gt;
            &lt;Type&gt;http://openid.net/signon/2.0&lt;/Type&gt;
            &lt;Type&gt;http://openid.net/extensions/aqe/1.0&lt;/Type&gt;
            &lt;URI&gt;http://weakidp.example.com/openid/server&lt;/URI&gt;
            &lt;openidaqe:enroll.verified.captcha&gt;
                yes
            &lt;/openidaqe:enroll.verified.captcha&gt;
            &lt;openidaqe:enroll.verified.telephone&gt;
                no
            &lt;/openidaqe:enroll.verified.telephone&gt;
            &lt;openidaqe:enroll.verified.email&gt;
                yes
            &lt;/openidqe:enroll.verified.email&gt;
            &lt;openidaqe:user.authentication.methods&gt;
                password
            &lt;/openidaqe:user.authentication.methods&gt;
        &lt;/Service&gt;

        &lt;Service&gt;
            &lt;Type&gt;http://openid.net/signon/2.0&lt;/Type&gt;
            &lt;Type&gt;http://openid.net/extensions/aqe/1.0&lt;/Type&gt;
            &lt;URI&gt;http://strongidp.example.com/openid/server&lt;/URI&gt;
            &lt;openidaqe:enroll.verified.captcha&gt;
                yes
            &lt;/openidaqe:enroll.verified.captcha&gt;
            &lt;openidaqe:enroll.verified.telephone&gt;
                no
            &lt;/openidaqe:enroll.verified.telephone&gt;
            &lt;openidaqe:enroll.verified.email&gt;
                yes
            &lt;/openidqe:enroll.verified.email&gt;
            &lt;openidaqe:user.authentication.methods&gt;
                hardotp,voicebio
            &lt;/openidaqe:user.authentication.methods&gt;
        &lt;/Service&gt;
    &lt;/XRD&gt;
&lt;/xrds:XRDS&gt;
</pre></div>
        

<a name="rfc.references1"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>
<h3>10.&nbsp;Normative References</h3>
<table width="99%" border="0">
<tr><td class="author-text" valign="top"><a name="OpenIDAuthentication2.0">[OpenIDAuthentication2.0]</a></td>
<td class="author-text">Recordon, D., Hoyt, J., Hardt, D., and B. Fitzpatrick, &ldquo;OpenID Authentication 2.0 - Draft 10,&rdquo; 2006 (<a href="http://www.openid.net/specs/openid-authentication-2_0-10.txt">TXT</a>, <a href="http://www.openid.net/specs/openid-authentication-2_0-10.html">HTML</a>).</td></tr>
<tr><td class="author-text" valign="top"><a name="RFC2119">[RFC2119]</a></td>
<td class="author-text">Bradner, B., &ldquo;<a href="ftp://ftp.isi.edu/in-notes/rfc2119.txt">Key words for use in RFCs to Indicate Requirement Levels</a>,&rdquo; RFC&nbsp;2119, ?.</td></tr>
<tr><td class="author-text" valign="top"><a name="SAMLAC">[SAMLAC]</a></td>
<td class="author-text">Kemp, J., &ldquo;<a href="http://docs.oasis-open.org/security/saml/v2.0/saml-authn-context-2.0-os.pdf">SAML 2.0 Authentication Context</a>,&rdquo; 2005.</td></tr>
<tr><td class="author-text" valign="top"><a name="Yadis">[Yadis]</a></td>
<td class="author-text">Miller, J., &ldquo;Yadis Specification 1.0,&rdquo; 2005 (<a href="http://yadis.org/papers/yadis-v1.0.pdf">PDF</a>, <a href="http://yadis.org/papers/yadis-v1.0.odt">ODT</a>).</td></tr>
</table>

<a name="rfc.authors"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>
<h3>Authors' Addresses</h3>
<table width="99%" border="0" cellpadding="0" cellspacing="0">
<tr><td class="author-text">&nbsp;</td>
<td class="author-text">David Recordon</td></tr>
<tr><td class="author-text">&nbsp;</td>
<td class="author-text">VeriSign, Inc.</td></tr>
<tr><td class="author-text">&nbsp;</td>
<td class="author-text">487 E Middlefield Road</td></tr>
<tr><td class="author-text">&nbsp;</td>
<td class="author-text">Mountain View, CA  94043</td></tr>
<tr><td class="author-text">&nbsp;</td>
<td class="author-text">USA</td></tr>
<tr><td class="author" align="right">Email:&nbsp;</td>
<td class="author-text"><a href="mailto:drecordon@verisign.com">drecordon@verisign.com</a></td></tr>
<tr cellpadding="3"><td>&nbsp;</td><td>&nbsp;</td></tr>
<tr><td class="author-text">&nbsp;</td>
<td class="author-text">Avery Glasser</td></tr>
<tr><td class="author-text">&nbsp;</td>
<td class="author-text">VxV Solutions, Inc.</td></tr>
<tr><td class="author-text">&nbsp;</td>
<td class="author-text">329 Bryant Street</td></tr>
<tr><td class="author-text">&nbsp;</td>
<td class="author-text">Suite #2D</td></tr>
<tr><td class="author-text">&nbsp;</td>
<td class="author-text">San Francisco, CA  94107</td></tr>
<tr><td class="author-text">&nbsp;</td>
<td class="author-text">USA</td></tr>
<tr><td class="author" align="right">Email:&nbsp;</td>
<td class="author-text"><a href="mailto:aglasser@vxvsolutions.com">aglasser@vxvsolutions.com</a></td></tr>
<tr cellpadding="3"><td>&nbsp;</td><td>&nbsp;</td></tr>
<tr><td class="author-text">&nbsp;</td>
<td class="author-text">Paul Madsen</td></tr>
<tr><td class="author-text">&nbsp;</td>
<td class="author-text">NTT</td></tr>
<tr><td class="author-text">&nbsp;</td>
<td class="author-text">150 Insmill Crescent</td></tr>
<tr><td class="author-text">&nbsp;</td>
<td class="author-text">Ottawa, ON  K2T 1G2</td></tr>
<tr><td class="author-text">&nbsp;</td>
<td class="author-text">Canada</td></tr>
<tr><td class="author" align="right">Email:&nbsp;</td>
<td class="author-text"><a href="mailto:paulmadsen@ntt-at.com">paulmadsen@ntt-at.com</a></td></tr>
</table>
</body></html>