<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">I think I see now…the last sentence isn’t clear on *how* the AS/OP treats the authen as failed.<div class=""> <br class=""><div class="">
<div style="color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><span class="Apple-style-span" style="border-collapse: separate; line-height: normal; border-spacing: 0px;"><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div class=""><div class=""><div class="">Phil</div><div class=""><br class=""></div><div class="">Oracle Corporation, Identity Cloud Services Architect</div><div class="">@independentid</div><div class=""><a href="http://www.independentid.com" class="">www.independentid.com</a></div></div></div></div></span><a href="mailto:phil.hunt@oracle.com" class="" style="orphans: 2; widows: 2;">phil.hunt@oracle.com</a></div></div></div></div></div></div></div></div></div></div></div></div></div>
</div>
<div><br class=""><blockquote type="cite" class=""><div class="">On Jun 5, 2018, at 1:09 PM, Torsten Lodderstedt <<a href="mailto:torsten@lodderstedt.net" class="">torsten@lodderstedt.net</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class=""><br class=""><blockquote type="cite" class="">Am 04.06.2018 um 18:42 schrieb Phil Hunt <<a href="mailto:phil.hunt@oracle.com" class="">phil.hunt@oracle.com</a>>:<br class=""><br class="">I seem to recall Mike indicating that just because the OP could not meet the ACR requested, the RP/Client may still choose to accept the authentication at some reduced or alternate set of methods. IOW a fail to meet the ACR is not necessarily a fail.<br class=""></blockquote><div class=""><br class=""></div><div class=""><br class=""></div>That’s correct - if the acr claim was not requested as essential claim. <div class=""><br class=""></div><div class="">For your convenience, here is the respective spec text again: <br class=""><div class=""><br class=""></div><div class="">"If the acr Claim is requested as an Essential Claim for the ID Token with<br class="">a values parameter requesting specific Authentication Context Class<br class="">Reference values and the implementation supports the claims parameter, the<br class="">Authorization Server MUST return an acr Claim Value that matches one of the<br class="">requested values. The Authorization Server MAY ask the End-User to<br class="">re-authenticate with additional factors to meet this requirement. <b class="">If this<br class="">is an Essential Claim and the requirement cannot be met, then the<br class="">Authorization Server MUST treat that outcome as a failed authentication<br class="">attempt</b>."</div><div class=""><br class=""></div><div class="">I personally think the spec lacks an suitable error definition. <span class="Apple-tab-span" style="white-space:pre"> </span></div><div class=""><br class=""><blockquote type="cite" class=""><br class="">That said, no authentication at all should lead to an access_denied error at minimum.<br class=""><br class="">Phil<br class=""><br class="">Oracle Corporation, Identity Cloud Services Architect<br class="">@independentid<br class=""><a href="http://www.independentid.com/" class="">www.independentid.com</a><br class=""><a href="mailto:phil.hunt@oracle.com" class="">phil.hunt@oracle.com</a><br class=""><br class=""><blockquote type="cite" class="">On Jun 4, 2018, at 9:34 AM, Torsten Lodderstedt <torsten@lodderstedt.net> wrote:<br class=""><br class=""><br class=""><br class=""><blockquote type="cite" class="">Am 01.06.2018 um 19:39 schrieb George Fletcher <gffletch@aol.com>:<br class=""><br class="">I think I'd prefer either 'access_denied' as defined by RFC 6749 or an 'authentication_failed' error that is a little more generic than 'unable_to_meet_authentication_requirements' which I feel is leaking aspects of the authentication that shouldn't be exposed to the client.<br class=""></blockquote><br class="">Take into account the RP asked for a certain ACR, which the OP was unable to comply with. <br class=""><blockquote type="cite" class=""><br class="">In the you case you provided Torsten, there isn't anything the RP can do as the user first needs to enable 2SV on their account at the OP.<br class=""></blockquote><br class="">It can use another OP or implement the desired use case using local means.<br class=""><br class=""><blockquote type="cite" class=""><br class="">Thanks,<br class="">George<br class=""><br class="">On 5/29/18 6:06 AM, Torsten Lodderstedt via Openid-specs-ab wrote:<br class=""><blockquote type="cite" class="">That’s rather tricky. The OP must use this parameter to indicate to the RP what acr policy it fulfilled in the respective transaction. The value in acr is not necessarily the value the RP asked for. But this holds only true if the acr claim was not requested as essential claim. In this case, the OP must „MUST treat that outcome as a failed authentication attempt.“ In my interpretation, this requires the OP to send an error response to the client, which only carries the error data. <br class=""><br class=""><br class=""><blockquote type="cite" class="">Am 28.05.2018 um 05:29 schrieb Phil Hunt <phil.hunt@oracle.com><br class="">:<br class=""><br class="">Isn’t this what the acr response param is for...<br class=""><br class="">acr<br class="">OPTIONAL. Authentication Context Class Reference. String specifying an Authentication Context Class Reference value that identifies the Authentication Context Class that the authentication performed satisfied. The value "0" indicates the End-User authentication did not meet the requirements of ISO/IEC 29115 [ISO29115] level 1. <br class=""><br class="">Phil<br class=""><br class="">On May 27, 2018, at 9:00 AM, Torsten Lodderstedt via Openid-specs-ab <br class=""><openid-specs-ab@lists.openid.net><br class="">wrote:<br class=""><br class=""><br class=""><blockquote type="cite" class="">Hi Vladimir,<br class=""><br class=""><br class=""><blockquote type="cite" class="">Am 26.05.2018 um 23:42 schrieb Vladimir Dzhuvinov via Openid-specs-ab <openid-specs-ab@lists.openid.net><br class="">:<br class=""><br class="">If you're looking for a standard error code for "user failed to authenticate (with required ACR)", access_denied appears to be the closest and only choice. What the RP would make of that error code is another question :)<br class=""><br class="">http://openid.net/specs/openid-connect-core-1_0.html#AuthError<br class=""><br class=""><br class="">In practice, many OPs won't send the browser back to the RP if the user failed to authenticate, i.e. the browser will remain at the login screen, with the user given the option for some sort of recovery and perhaps the option to cancel the request and return to the RP.<br class="">As for login_required and interaction_required - my reading of the spec is that these are intended for error responses to prompt=none authentication requests and shouldn't be used to signal other conditions.<br class=""><br class="">http://openid.net/specs/openid-connect-core-1_0.html#AuthRequest<br class=""></blockquote>That’s my problem. In my use case, the OP is unable to meet the RP’s requirements either entirely or for the particular user (e.g. no second factor available). I think stopping request processing at the OP is not a good option. I would like to send the user agent back to the RP along with enough information to act upon. My current feeling is we need another, distinct error code - something like authentication_failed or unable_to_meet_authentication_requirements.<br class=""><br class="">best regards,<br class="">Torsten. <br class=""><br class=""><br class=""><blockquote type="cite" class=""><br class=""><blockquote type="cite" class="">none<br class="">The Authorization Server MUST NOT display any authentication or consent user interface pages. An error is returned if an End-User is not already authenticated or the Client does not have pre-configured consent for the requested Claims or does not fulfill other conditions for processing the request. The error code will typically be login_required, interaction_required, or another code defined in Section 3.1.2.6. This can be used as a method to check for existing authentication and/or consent.<br class=""><br class=""></blockquote><br class="">Vladimir<br class=""><br class=""><br class="">On 25/05/18 18:41, Filip Skokan via Openid-specs-ab wrote:<br class=""><br class=""><blockquote type="cite" class="">Depending on the situation at the OP I believe this could be any of (in<br class="">order of my preference) login_required, interaction_required, access_denied<br class=""><br class="">Best,<br class="">*Filip Skokan*<br class=""><br class="">On Fri, May 25, 2018 at 4:13 PM, Torsten Lodderstedt via Openid-specs-ab <<br class=""><br class=""><br class="">openid-specs-ab@lists.openid.net<br class=""><blockquote type="cite" class="">wrote:<br class=""><br class=""></blockquote><br class=""><blockquote type="cite" class="">Hi all,<br class=""><br class="">I just came across the following text (again) in the OpenID Connect Core<br class="">Spec:<br class=""><br class="">"If the acr Claim is requested as an Essential Claim for the ID Token with<br class="">a values parameter requesting specific Authentication Context Class<br class="">Reference values and the implementation supports the claims parameter, the<br class="">Authorization Server MUST return an acr Claim Value that matches one of the<br class="">requested values. The Authorization Server MAY ask the End-User to<br class="">re-authenticate with additional factors to meet this requirement. If this<br class="">is an Essential Claim and the requirement cannot be met, then the<br class="">Authorization Server MUST treat that outcome as a failed authentication<br class="">attempt.“<br class=""><br class="">What error code is the OP supposed to use to signal the failed<br class="">authentication to the RP?<br class=""><br class="">best regards,<br class="">Torsten.<br class="">_______________________________________________<br class=""><br class=""><br class=""></blockquote></blockquote>_______________________________________________<br class="">Openid-specs-ab mailing list<br class=""><br class="">Openid-specs-ab@lists.openid.net<br class="">http://lists.openid.net/mailman/listinfo/openid-specs-ab<br class=""></blockquote></blockquote></blockquote><br class=""><br class="">_______________________________________________<br class="">Openid-specs-ab mailing list<br class=""><br class="">Openid-specs-ab@lists.openid.net<br class="">http://lists.openid.net/mailman/listinfo/openid-specs-ab<br class=""></blockquote><br class=""></blockquote><br class=""></blockquote><br class=""></blockquote><br class=""></div></div></div></div></blockquote></div><br class=""></div></body></html>