<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body style="overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;"><div>Hi Kosuka</div><div><br></div>I’d agreed that it’s slightly messy.<div><br></div><div>However ’native app’ is not quite a defined term in OAuth 2.0 (it’s actually the name of a ‘client profile’ as per <a href="https://www.rfc-editor.org/rfc/rfc6749#section-2.1">https://www.rfc-editor.org/rfc/rfc6749#section-2.1</a> ); in OAuth 2.0 the term is essentially restricted to a native app that is a public client, rather than saying that a native app (in the more general sense) can only be a public client.</div><div><br></div><div><a href="https://www.rfc-editor.org/rfc/rfc6749#section-2.1">https://www.rfc-editor.org/rfc/rfc6749#section-2.1</a> also states that a confidential client can be any that is 'capable of maintaining the confidentiality of their credentials’.</div><div><br></div><div>e.g. <a href="https://datatracker.ietf.org/doc/html/rfc6819#section-3.7">https://datatracker.ietf.org/doc/html/rfc6819#section-3.7</a> makes it clear that this case is a confidential client, albeit it notes "Achieving this level for native applications is much more difficult” - which was very true when written 12 years ago, but a little less true today (iOS’s Secure Enclave was announced 11 years ago and another key change to enable this, device/app attestations, is even more recent).</div><div><br></div><div><a href="https://datatracker.ietf.org/doc/html/rfc8252#section-8.5">https://datatracker.ietf.org/doc/html/rfc8252#section-8.5</a> similarly clarifies that it’s only shared secrets that are problematic, not native apps themselves.</div><div><div><br></div><div>I don’t know if that helps? If you have an idea on what we could do to improve to situations please let us know!</div><div><br></div><div>Thanks</div><div><br></div><div>Joseph</div><div><br><blockquote type="cite"><div>On 12 Jun 2024, at 15:29, Kosuke Koiwai via Openid-specs-fapi <openid-specs-fapi@lists.openid.net> wrote:</div><br class="Apple-interchange-newline"><div><div>Hi FAPIers,<br><br>Sorry for digging out an old thread, but is there a place other than<br>the OAuth2.1 draft where it is clearly stated that "a native app that<br>can securely manage private keys can be a confidential client"?<br>Many websites still say native apps are public clients. The only other<br>place I could find where a confidential native app was mentioned was:<br>https://bitbucket.org/openid/fapi/src/master/Financial_API_Implementation_And_Deployment_Advice.md<br><blockquote type="cite">Per-installation confidential client<br> On platforms where sufficiently secure storage of secrets is available, each instance of an application can register it's own secrets with the server. For example:<br> iOS Secure Enclave accessed via the kSecAttrTokenIDSecureEnclave flag<br> Android's hardware-back keystore accessed via the android.security.keystore API<br>The method used to protect the registration endpoint at the authorization server is outside of the scope of the FAPI specification.<br></blockquote><br>Actually, OAuth2.0 clearly states that "a native application is a<br>public client installed and executed on the device used by the<br>resource owner."<br>So as long as FAPI2.0 is a profile of OAuth2.0, I'm afraid that our<br>position might not be able to be against the idea that a native app is<br>a public client.<br><br>Kosuke<br><br><br>On Mon, Mar 16, 2020 at 3:10 AM Ralph Bragg via Openid-specs-fapi<br><openid-specs-fapi@lists.openid.net> wrote:<br><blockquote type="cite"><br>HI Michael,<br><br><br><br>On 1; Public client support is removed, the security issues are well documented with public clients however this does not mean native app clients are not supported. A native app, particularly on modern smart phones, can and should be implemented as private clients.<br><br><br><br>Cheers,<br><br>RB<br><br><br><br>From: Openid-specs-fapi <openid-specs-fapi-bounces@lists.openid.net> on behalf of "Peck, Michael A via Openid-specs-fapi" <openid-specs-fapi@lists.openid.net><br>Reply to: Financial API Working Group List <openid-specs-fapi@lists.openid.net><br>Date: Sunday, 15 March 2020 at 18:04<br>To: Financial API Working Group List <openid-specs-fapi@lists.openid.net><br>Cc: "Peck, Michael A" <mpeck@mitre.org><br>Subject: [Openid-specs-fapi] Questions / comments on FAPI 2.0 Baseline Profile<br><br><br><br>Hi all,<br><br><br><br>I have some questions and comments on the current draft of the FAPI 2.0 Baseline Profile (https://bitbucket.org/openid/fapi/src/master/FAPI_2_0_Baseline_Profile.md).<br><br><br><br>I’m new here, please let me know if I’m misunderstanding something / if these are more appropriate for the issue tracker instead.<br><br><br><br>1.<br><br>The profile appears to not allow public clients. Is that intentional? If so, why not – are native app clients not an intended use case?<br><br>(Requirements for Authorization Servers #9 states “MUST authenticate clients” and Requirements for Clients #4 states “MUST support client authentication”, which to me preclude public clients.)<br><br><br><br>2.<br><br>The profile requires that resource servers verify the revocation status of access tokens (Requirements for Resource Servers #3). Is this practical?<br><br><br><br>Requirements for Authorization Servers #15 states “MUST provide a means for resource servers to verify the validity, integrity, sender-constraining, scope…expiration and revocation status of an access token, either by providing an introspection endpoint…by exposing signature verification keys, or by deployment-specific means.”<br><br>I would think the revocation status requirement would force the resource server to connect back to the authorization server (to its introspection endpoint or other “deployment-specific means”) every time an access token is presented, which might not always be feasible?<br><br>I don’t see how “exposing signature verification keys” would suffice to meet the revocation status verification requirement?<br><br><br><br>Another option might be to weaken the MUST for verifying revocation status of access tokens, add a requirement that the AS limit the lifetime of access tokens, and ensure that the AS check the revocation status of refresh tokens when they are presented? That would enable resource servers to more safely accept access tokens without having to reach back to the AS every time to check revocation status?<br><br><br><br>3.<br><br>Requirements for Resource Servers #6 states “MUST identify the associated entity to the access token”.<br><br>What does “associated entity” mean? Does it mean the subject of the access token?<br><br><br><br>4.<br><br>Cryptography and Secrets #3 states “authorization servers MUST provide a client secret that adheres to the requirements…if a symmetric key is used.”<br><br>I think this statement should be removed since the profile does not allow a symmetric key / client secret to be used for client authentication?<br><br><br><br>Thanks,<br><br>Mike<br><br><br><br>Michael Peck<br><br>The MITRE Corporation<br><br>+1-410-272-5959<br><br>_______________________________________________<br>Openid-specs-fapi mailing list<br>Openid-specs-fapi@lists.openid.net<br>http://lists.openid.net/mailman/listinfo/openid-specs-fapi<br></blockquote>_______________________________________________<br>Openid-specs-fapi mailing list<br>Openid-specs-fapi@lists.openid.net<br>https://lists.openid.net/mailman/listinfo/openid-specs-fapi<br></div></div></blockquote></div><br></div></body></html>