-
Notifications
You must be signed in to change notification settings - Fork 33
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Consent URL API vs OIDC consent collection #224
Comments
@AxelNennker What is missing in above list is the mangement of the consent, for which the API provider is responsible. In the ideal case, the end user should only give once consent for a case, and the text presented to the end user should inform him about both the processing that the API Provider will do, and the processing the API Consumer will do. It will also need to specify the purpose, so the end user can make an informed decision. If you combine the above with the current specification, there are several issues that can occur. To name a couple:
What I think is necessary to solve this:
|
Another complexity I see is when the API used at onboarding is different than the one used during the customer life cycle, or when there are more than one API used in the case Take for example the case of a dentist, that wants to send appointment reminders by SMS to its customers. To make sure the number being used is correct, he wants to use Number Verification at onboarding. There should only be one consent question (which would be something like "Do you want to receive appointment reminders by SMS, and do you agree to verify your number with your provider"). This is a typical consent use case, and the consent given should be valid for both API's. How would this look like in the case of the OIDC consent collection? Can this be supported without asking consent twice ?? |
I fully agree that an Authorization Code or CIBA authentication flow can be initiated at any time, depending on the use case and the application's capabilities, to capture consent. In fact, consent capture doesn't need to happen precisely when the API is consumed. The key benefit of the Consent URL API is that it offers a significant advantage by enabling a fully decoupled, out-of-band mechanism for consent capture. This API allows the application to fully control the user experience (and I'm not talking about the look and feel of the consent capture page here, which would be provided by the Operator). The application can generate a consent URL from the Operator, which the user must authenticate with. However, the application has the flexibility to deliver this URL to the user through the most appropriate channel or medium, tailored to the user's current context. Importantly, this API does NOT delegate consent capture to a third party but rather empowers the third party (the application) to present the Operator's consent capture URL at the most opportune time and place. The actual consent capture occurs within the Operator's secure environment, ensuring the user's authentication with the Operator. In uses cases for CAMARA, the Authorization Code flow has been defined to be used with network authentication (a.k.a. silent authentication), where user interaction was minimal. Partners have often raised concerns about the user experience, especially when the user is directed to an Operator portal for authentication or consent within the Authorization Code flow. Furthermore, the Authorization Code flow assumes the availability of a front-end device for the user, which isn't always the case. The Consent URL API adds a layer of flexibility to the consent collection process, allowing applications to integrate and customize the consent experience more seamlessly without intending to replace existing CAMARA OIDC flows. Instead, it enhances these flows by providing more options for when and how consent is captured. |
👍agree
👍agree
👍100% agree. Consent URL API is not intended to delegate consent as explained above.
👍agree
That's what's currently defined for Auth code Flow, yes. But Consent URL API would be an analogous procedure triggered independently of Auth Code Flow itself (or CIBA).
Same. 👍agree
👍agree For me it is not about "Consent URL API vs OIDC consent collection" but "Consent URL API + OIDC consent collection" |
Why not just use the following OIDC authoriztation code flow request?
|
Hi, @jpengar could you provide a diagram for this API consent url ? |
During the TSC meeting we agreed that we should have a deadline for this ICM discussion, and that deadline would be the next ICM meeting. |
The API consumer can use OIDC authorization code flow to ask for consent even if they plan to use CIBA later. Even for a CIBA-only API provider following the OIDC standard is a good idea, I think.
|
@sebdewet In the API proposal to the API backlog, Jorge shared some slides describing potential uses cases: camaraproject/APIBacklog#67 (comment)
As mentioned in #224 (comment), the proposed Consent URL API provides a decoupled out-of-band mechanism for consent capture, enabling the API consumer to initiate a consent capture procedure at any time, including before obtaining an access token with OIDC/CIBA. This would be a standardised CAMARA consent capture procedure, complementary to OIDC and CIBA. |
As previously stated in #215 (comment), the current CAMARA definitions only consider network-based authentication in the Authorization Code Flow. In response to your proposed OIDC request with prompt=consent, CAMARA does not prevent the Operator from using additional authentication methods to authenticate the user who owns the network-authenticated device as part of the in-band consent capture process when consent is needed. However, network-based authentication will still be carried out. In the event that the user authenticated in the consent capture process does not correspond with the network-authenticated device, the authentication server must return an error. Therefore, this will require the execution of your proposed request from the user's consumption device. The consent URL API provides the flexibility to present the obtained consent URL in the optimal location for the user at that time. |
DT's View on the Consent URL The ICM working group was tasked with discussing and reaching a consensus on the consent URL issue. As part of this discussion, the group sought to address an underlying issue: "Is the auth code flow restricted to using network-based authentication?" This restriction was cited as one of the reasons why a consent URL is necessary. DT believes that if the rationale for supporting the consent URL is that Camara restricts the auth code flow to network-based authentication, the focus should be on removing this Camara-induced limitation, while ensuring interoperability through clear and specific guidelines. Addressing this issue would be the first step towards a potential solution for the problem in line with the OIDC standards. However, current discussions on this matter are stalled, and we continue to affirm the existing restriction. If the proposal suggests that the Consent URL is an additional mechanism to capture consent, DT sees the following issues: Some examples of these decisions include:
DT would actively support any solution that is part of an established standard or developed in collaboration with the OIDF (OpenID Foundation). However, we currently believe that the Consent URL proposal introduces a mechanism that is not part of the accepted standards in Camara. We are concerned that this approach may lead to fragmentation and interoperability challenges. |
I do not agree with
With the exception of NumberVerfication that explicitly identifies the device being used, all other APIs can be handled by the CSP in a way that the API provider does all it can to satisfy the API Consumer's needs.
Network-based authentication is a convenience function in KYC fill-in. |
@diegogonmar During the TSC meeting on 2024-12-05 you seem to put the focus of Consent URL API on scenarios that include a Target Device. For a target device with no input-output capabilities (e.g. dog tracker with SIM) I imagine the following scenario.
|
Thanks for example @AxelNennker, quite useful. The agreement in TSC was to move forward to create a focussed sub-team within ICM to discuss the most optimal solution. I understood that DT will evolve and enter into details of the OIDC based solution, right? Your bullet list is fine, we need to enter into details. Few challenges were raised time ago, when talking about network auth: #215 (comment). Sadly no answer was provided, so those points were not addressed in that discussion, and some apply to the bullet list provided. Maybe you can elaborate a solution giving answer to those points. Regarding: You propose login_hint to be something more than a hint but a "must authenticate user owner of this msisdn?". If so, override happens only with prompt=consent? Does login_hint take precedence on network_auth in case of mismatch between network-authenticated MSISDN and the one provided in login_hint? All of this should be addressed otherwise there is no interoperability, as currently CAMARA ICM instructs Operator to perform network auth in AuthCode. This proposal seems to override that behavior, but unless clear rules are defined (when to be overriden, how?), there will be no interoperability. Regarding: Is this token issued for the person that used their credentials (may own N msisdns) or for the msisdn set in login_hint? Location API that will be used for this example is device based, so token issued for a person is useless. If accepted is risky! because consent was given to a given MSISDN, if token is issued for a person, may call Location API with a different MSISDN. Maybe you propose token issued for msisdn, so login is done for the msisdn although user/password is forced to collect consent? This can be solved, but the whole mechanism need to be defined, don't you think? There are plenty of grey zones, where each operator may act different, e.g.: ignoring login_hint is perfectly possible and makes sense in case of Network Auth default behavior So, rather than having a high-level example, would you make a full proposal addressing these and other points/challenges that may arise? I would appreciate a solution proposal to properly iterate on the points to be solved, taking group decisions. |
I created #244 enabling API consumers to demand network-based authentication. API subprojects can make network-based authentication mandatory by mandating those parameters for that API. I also suggest that APIs specify "prompt=none" if the do not want user-interaction. NumberVerification currently assumes that OIDC authorization code flow with network-based authentication happens. Please see also this issue in NumberVerification: camaraproject/NumberVerification#160 |
I think we need consent for a future Consent URL API. Whether a User consented to an API is personal information in itself. Is the purpose of the request that gets consent for the Consent URL API the same as the purpose for the Consent URL API? |
Ericsson and Vonage support the idea of a consent info API which can be called by an application upfront to learn about the consent status for this application related to an MSISDN. We do not think that going for an authorization code flow request with prompt = none or prompt = "consent" ONLY. It is not good enough to solve the majority of use cases. Reasoning is as follows:
We are not discarding an "in-flow" consent capture approach, where reasonable for the app, but ask to provide an additional optional option for an app to learn about the consent status and have the opportunity to bring up a consent capture dialog. |
regarding #215 (comment):
ad a) I created #244 to define ONE acr_value that allowes the API consumer to request network-based authentication. ad b) I created #228 and #229 to define interoperable API consumer behaviour. ad c) This is about the API request not a request to the AZ, just repeating this to state how I understand c) Questions:
ad d) We have to define interoperable behaviour of the AZ.That also includes how to handle login_hint=tel:... ad e) Maybe, if the API requires NBA or if the API Consumer requested NBA. In OIDC ACF if consent is needed or requested the Operator can decide which device identifier the consent applies to. |
Hi Axel, I want to take this from a generic use case perspective. My intention is to allow an app to learn about the consent status via a read operation executed on a CIBA flow. This is the consent Info API, Ericsson and Vonage are proposing. The result of this read operation should also indicate whether the Target Device named in the read operation is its own legal responsible. Then the app can judge whether it makes sense to bring up a consent capture dialog (if needed) or not. Please let us ON PURPOSE do not mix the NBA discussion with this topic. Using FE flow and NBA (or some other authentication) to learn the consent status is only feasible if UD = TD. This is what the FE flow is meant for in RFC 6749 independent of the authentication mechanism - at least this is my interpretation of the standard. I do not neglect that for some use cases where UD = TD is definitively an option to use FE flow with prompt = none to check consent status. However, then the app would need to run the /authorize operation once again with prompt = consent to be redirected to the consent capture page. We (Ericsson/Vonage) do not think that this is a good user experience at all. Can you please explain how we should solve use cases where UD and TD are not the same e.g. fleet management app using device location, find my pet, find grandma etc. using FE flows ? |
CAMARA ISSUE 224.pdf |
|
Just to add to the discussion: we also have cases where there is simply no time to collect consent in the API Flow, because the end user is performing a transaction with for example a merchant, and the transaction needs to be finalized in 500 ms. If the user has not given prior consent for the API in question, the merchant would like to use a different method in stead, In the current flows the Telco always starts the consent collection in case consent has not been given in the past. To enable these kind of flows, it is necessary that the merchants can see the status of consent before executing the API calls. |
Those merchants can just send a request with "prompt=none" and they get back "consent_required" if it is required for the scope values/purpose. If the user executed their rights to revoke consent, then the error consent_required must be returned in OIDC Authorization Code Flow. If consent is required, then the API consumer get issue a OIDC Authorization Code Flow request with the same parameter but change the value of the prompt parameter from "none" to "consent". What is the problem? The OIDC standards provides everything we need. |
@AxelNennker What about the CIBA flow? How would you indicate here that consent should not be gathered in the flow??? |
I fully agree. This API is really meant to support exactly these use cases and allow an app to drive the consent collection in line with the needed user experience. @axel: To understand your proposal correctly, I just repeat it here once again: You think that the only way for triggering consent collection is to do it from the FE flow. This means that
In addition we must be able to support use cases where user device and target device are different. |
I think is not possible not to ask for end-user consent in CIBA without revealing the end-user's consent status for that API and scopes. Please see CIBA privacy #258 OIDC added user authentication and user consent to OAuth2, CIBA added backend initiated authentication and leverages the operators' ability to send an authentication message to the end-user's authentication device. This is an important asset operators have. If CIBA does not send a message to the end-user's authentication device then CIBA degenerates to OAuth2 (two-legged flow) without User authentication and without user consent. But ICM mandates three-legged access token if personal data is processed.
It is not possible to indicate that consent should not be gathered in CIBA. Consent can even "not be checked" in CIBA prior to end-user authentication because "validate user identifier" can validate the format of the user identifier and whether that identifier "belongs" to the operator, but that step cannot and does not authenticate the User. Without user authentication there cannot be a consent gathering nor consent checking. |
@AxelNennker In the CIBA flow you can also trigger an out of band consent collection (for example by sending an SMS to an end user for a login to a site where the consent van be gathered). Anyway, the current CIBA flow and Front End Flow are much too slow for case where the total processing time must be limited to 500 ms. That includes any other processing the merchant needs to do. What would be a much better option is to be able to do a superfast <50ms check whether consent has been collected before entering a slow 3 legged flow. Especially because end users can also withdraw their consent through a selfcare portal of the telco to manage and withdraw user consent (which the merchant would not know). |
Ad 1) Consent Info status can be checked using and OIDC ACF request with prompt=none. CIBA sends a message to the User's authentication device and user authentication and consent collection happen on the authentcation device. So "no" to question 1. An API potentially subject to consent can use either OIDC Authorization Code (front-end flow) flow or CIBA (backend). Ad 2)
I guess the emphasis of 1) and 2) is on "target device", which you define in PR #256 With prompt=consent we have a standard Consent URL that can be called any time. What is missing from OIDC? What does a new API provide that OIDC does not provide? |
@AxelNennker According to the assessment of Telefonica's legal team, the Consent URL API could be consumed on a "Legal Obligation" legal basis (without opt-in/opt-out) and would therefore meet the conditions agreed upon in CAMARA for an API to be consumed using 2-legged access tokens (Client Credentials grant). |
Can you share that legal review please? |
The simplest possible Consent URL API would always return the same Consent URL and would not need any client authentication at all, right? Maybe the client_id and redirect_uri would be based on the client_credentials Consent URL API request:
Consent URL API response:
That implementation of Consent URL API does not include any personal data and no legal team would object to it. |
To Axel's comment above:
For the use case of "User Device isNOTequal TargetDevice" you MUST not use OIDC Authorization Code Flow with prompt = none to check. This is simply not supported. The OIDC standard describes FE flow ONLY in the scenario where UD = TD. Regarding Axel's second comment:
The Consent URL API must have MSISDN as input parameter, otherwise the system cannot determine the correct end point. |
The OIDC standard does not know anything about devices. In OIDC and CIBA the end-user authenticates and grants consent, or not.
That depends how we specify how the the AZ treats the request parameters. As we did with "purpose as scope" CAMARA could define that login_hint=tel:MSISDN is treated as an indicator which device is probably the target device. Example page after end-user authentication (with or without network-based authentication) single contract: <API Consumer> would like to locate your device <login hint value>. Example page after end-user authentication (with or without network-based authentication) multiple contracts: Dear <Firstname>, <API Consumer> would like to locate devices. Please check the checkboxes of the devices:
Please respect the privacy of these individuals. Press OK if you grant consent. Press No if you won't allow this. OpenId Connects assumes that the browser or webview might have access to Cookies reflecting the login-status at the OpenId Provider. "prompt=none" suggest to the OpenId Provider to use those Cookies. Some CAMARA API require network-based authentication - e.g. NumberVerification |
Hi Axel, I understand and agree that if we introduce further request parameters and transport information in the login_hint, we can tweak the protocol to transport more information, e.g. the identification of a resource owner (called target device). But this is really a little hack to me. The OIDC standard used login_hint and/or id_token_hint to identify the end user. Please see https://openid.net/specs/openid-connect-core-1_0.html. So I agree that workaround is technically possible. But having this as the one and only CAMARA mechanism to test whether consent is needed seems not a good idea to me. Also it introduces further burden on the authZ server implementations (local to the operators) and has lots of demands on the applications/application developers:
I recommend to double check with application developers and Vonage to see whether such an approach is reasonable. |
If a user withdraws consent while off-network, how is all prior access revoked instantly, not just at the next network interaction? |
I think, off-net or on-net is not really the important distinction here, because the end-user can alter their consent whether they are on-net or off-net. An OIDC Authorization Code Flow request with "prompt=consent" can start the API Providers consent management system and consent can be changed, regardless of whether the connection is on-net of off-net. The end-user authenticates to the API Provider with the authentication method the end-user is used to and which they have chosen e.g. they configured Passkeys to be used for a secure and convenient way of authentication. To your question: "how is all prior access revoked instantly" OAuth2 explicitly separats access token creation at the authorization server from access token validation at the resource server. The Resource Server is simpler than before OAuth2-times and only concerned with access token validation and scopes. Usually this problem is tackled by issuing short-lived access tokens and using refresh tokens. Related to this topic is this RFC7009 OAuth 2.0 Token Revocation. |
I do not intent to tweak login_hint, but we could agree in CAMARA that login_hint indicates the target device whether network-based authentication is done or not. The use of
Why is it (what?) the only CAMARA mechanism to test whether consent is needed?
I do not see the problem with the OIDC standard and demands on application developers and authZ server implementations. If the API Consumer uses an certified OpenId Provider then the prompt parameter is most likely already implemented, especially because implementing the prompt parameter is mandatory to implement for for all OpenId Providers. Network-based authentication is an asset CSPs bring to API business and it has to be implemented. Coming back to Consent URL API vs OIDC consent collection, if personal data is involved and consent is needed, then consent has to be managed and that end-user interaction has to be implemented somewhere by the API consumer. OIDC provides a standard protocol for end-user authentication and end-user consent. Why invent something new? |
Although prompt is MTI in OIDC the implemention is up to the OpenId Provider. |
Does the consent url api require consent? |
|
Would that be the case in all jurisdictions? eg Germany? |
The whole world is using OpenId Connect in all jurisdictions. The end-user is asked to authenticate, which they might do or not. The then authenticated end-user is granting their consent or not.
|
Problem description
Telefónica created a PR in API backlog regarding a new API named Consent URL.
It is DT's position that Consent URL API is not needed because at the same point in time Consent URL API would be used by the API consumer the API consumer can alternatively request an access token which also leads to consent being collected.
Possible Outcome
Additional Considerations
prompt
is mandatory to implement by all OpenId providers.The text was updated successfully, but these errors were encountered: