-
Notifications
You must be signed in to change notification settings - Fork 32
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
Allow to use operator_token (from TS43) to identify device on authentication request #145
Comments
For reference, here is the link to the current version (11) of the TS.43 spec Section 14 Device App authentication with OperatorToken |
are the following examples for the two options you mention? Option "new-parameter":
Line-breaks for display purposes only. JWE copied from JWE-RFC. Option "standard":
OIDC defines login_hint as:
Or use CIBA's login_hint_token?
The operator token can contain any information the Entitlement Server knows after EAP-AKA. Should this issue be named "Allow to use operator_token (from TS43) to identify device on authentication request" |
In the long run it would be good if we could use the operator token on the authentication request (authorization code request) as well as on the CIBA request. It will be rather straight forward to use it on the authorization code request (in line with the two examples). So if we rename the issue, I'm afraid that the CIBA flow is out. |
I actually re-checked CIBA, and in both CIBA and OIDC the request is named "authentication request". CIBA example using login_hint_token and the same JWE as in the other examples
I think "access token request" is wrong in the name and that "authentication request" covers all bases. |
renaming of issue done |
For completeness the CIBA-new-parameter variant of the example:
We might or we might not treat the operator_token parameter as a "hint". |
For the CIBA flow, there is no need to add a new parameter outside the standard. We can use the An example of a
In this case. we think the hint in the AuthCode flow is unnecessary because once the application gets the operator’s token the user is already authenticated, and there is no further need to use this flow from the consumption device to authenticate. The application can use the CIBA flow directly instead of using a complex AuthCode flow through redirects with the user's browser. |
@garciasolero thank you for that proposal. I agree, we could use
The primary authentication in AcquireOperatorToken is the authentication of the SIM-Card using EAP-AKA. |
Regarding I think that all depends for what the operator token is used and I think that e.g. for MFA and the operator token being one of the factors we might be better of with a new parameter OpenId and CIBA were created to use the OAuth2 Authorization Framework as the basis for an User Authentication Framework. OIDC is hugely important today and a big success. But the work continues e.g. in FAPI. This issue is about exploring the options of how to use the operator token in authentication request. @sebdewet objections on Orange's behalf regarding the purpose parameter come to mind. And in the end ICM decided not to introduce the purpose parameter. But we need to make progress and the operator token is really an operator asset that we should leverage. Maybe for the price of a new |
I agree that standards can evolve, but they tend not to do so in the short term. Moreover, some operators have already reported that there could be a problem because their solutions are based on frameworks/libraries that strictly implement the standards and do not allow them to extend the behaviour (e.g. adding new parameters). This problem could also occur in the client libraries used by the applications. |
Some code has to be developed anyway, when the login_hint is interpreted. But re-using login_hint is probably the easiest way forward. The Telekom Login team seems to prefer a new parameter for authorization code flow. For them this is more like multi-factor authentication. The operator token identifies the subscription and related data, while login_hint's intention is for user authentication. To get this done we should use the fastest way forward, which is probably re-using login_hint. We should write down use cases and user stories e.g. in NumberVerification. |
Would like to add the requirement of trailing the operator token with @operator-domain-identifier cc@AxelNennker |
Getting more technical regarding the operator token generation: One way to move forward is using appclips on iOS and instant apps on Android. App clips and instant apps are apps that don't need to be installed by the user. Additionally, the full app that creates the operator token should register an URL for itself. Any app that does EAP-AKA needs special permissions. (Do not be confused by Apple's appclip codes and the appclip-code generation tools. @mengan mentioned some of the above (e.g. "app clip") in NumberVerification camaraproject/NumberVerification#86 Of course, if you want to support operator tokens then you need an Entitlement Server that supports "AcquireOperatorToken". Let's work together implementing operator tokens and defining in Camara how to use them for Camara APs! |
This is all very exciting, and something that we have been talking about internally for quite some time, so thank you for introducing it! iOS AppClips are extremely promising solution in providing a secure way of communicating between all parties as it reduces the friction of introducing the Operator into the flow (compared to a browser, embedded browser window, or a fully installed app). I think Android Instant Apps is going to require more thought though, because as far as I know Android is not willing to allow Instant Apps access to the Operator Tokens - however, it may still be a good way to request the end-user install the full Operator app. We must be conscious of the Application Provider experience here; taking their customer out of their applications is hugely disruptive and if we're not careful it may be a prohibitive barrier to API adoption. I'm assuming that the Operator would be unwilling to allow access to their Operator Token (or opaque substitute) without the Application Provider being authenticated (and end-user consent granted?), which would mean the Application Provider would need to know the Operator before token was requested in order to provide the appropriate auth. An outstanding question is whether Apple/Android will allow the Operator to distribute the Operator Token to Application Providers if they're protecting it with a privileged SDK; it may be that the token needs to be swapped for an opaque token before being distributed. A final thought... wouldn't it be nice if the output to this was an OIDC |
Would it be relevant on how we handle this in ad tech? @AxelNennker and @chrishowell |
Would it be possible to append the ‘operator token’ with the ‘advertiser ID’ that has been assigned to both the ‘mobile device’ and the ‘user’? An existing open-source standard used in Ad Tech could be deployed. This standard is managed by an established advertising trade organization. Benefits
Future State Compliance
This would increase the number of API pings that would come from ad tech. |
The name of this issue suggests that the proposal is to use the operator token as an additional method of identifying the end user subscription, and this is reflected in some of the examples above, where the operator token is shown as an alternative to, or additional option for, the But in several comments, it is mentioned that the operator token can be used to authenticate the end user (UE). So is the proposal just to use the operator token solely for end user identification (so a more privacy friendly alternative to the MSISDN or IP address), or also for authentication? If the proposal is to also use it for authentication:
Thanks |
Hi Eric, The operator_token can be used by the application (the API client) to authenticate the end user device against the API provider (please see also TS.43 Service Entitlement Configuration (gsma.com)). |
Thanks @Elisabeth-Ericsson So I understand the intention is to authenticate something about the end user's "involvement" in the API flow. Returning to my questions above:
|
Hi Eric, regarding your questions:
Some additional info: According to my knowledge, none of the device OS vendors plan to support the operator token as described in TS 43 in short term to mid term. |
Hello TS.43 clients are typically provided by the OS maker, such as Google, and are offered as optional packages. |
@axel Nennker: you describe that you are using the carrier token to get a temporary token and from this the operator token. I assume that this works on the carrier app interacting with DT's backend. For an application on the device to use this mecahnism and send the operator token to the backend, the app must find the carrier app via a deep link. How do you envision this to work ? How is the link to the carrier app retrieved, assuming that the app must work with multiple carriers ? |
I would greatly appreciate it if someone could clarify the purpose of the carrier app, as its use is not referenced in TS 43. |
on Android, as you wrote above, I guess it's Google's TS.43 client, on iOS I don't know! |
Both iOS and Android require special permissions that only carriers get. The carrier-app needs these permission, otherwise there is no way to start EAP-AKA. In TS.43 the carrier-app is called TS.43 Client I assume that most carrier have some customer-facing app that could have the required privileges. |
Don't we need a solution that works without the user having to download an app? For iOS, the solution can be to use App Clips to avoid that problem. It can run with carrier privileges and retrieve carrier token. We then also need something similar on Android (or an API open to any app). |
There can't be one app for all carriers and there can't be one deep-link for all carriers. The mobile operating systems, as far as I know, do not allow this. Currently my plan for Camara is that the API consumer
I think the above fits into the OIDC flow and also into the OpenGateway flow. Just more redirects. If a telco wants to support e.g. Smartwatches, eSim profile transfer, etc, then the telco needs an Entitlement Configuration Server. A non-Camara use case is using the operator token for the carrier's own apps, no need for SMS-OTP or on-net network-based authentication. BTW wrong |
Although, Google/Android implements TS.43 and in that sense provides TS.43 clients, those APIs require special privileges which are not accessible by API consumer apps. Currently only carrier-apps can use these APIs. |
The ASAC-defined framework appears to be more flexible, as it eliminates the need for carrier privileges and allows any 3rd party to request a token. |
Yes, as explained above, we don't think that forcing users to go through an existing app would be a winning proposition. |
While your proposal would probably work, it still has some drawbacks against what's defined in ASAC:
Therefore we think that the best proposal here again is to stick to ASAC. |
This is indeed a big issue to allow the whole ecosystem or leverage the SIM as a convenient possession factor in app and needs to be resolved ASAP. |
Very interesting debates have arisen, but we think they are outside the scope of this forum. In our view, we should focus the discussion on what we need to define in order to work with operator tokens in the context of CAMARA, regardless of how they are generated and used to route the request. From a CAMARA perspective, it is an opaque identifier. Therefore, as mentioned before, we should simply define a new valid prefix for the |
Fully agree, but how much of the overall process should be described in detail in the CAMARA Security and Interoperability Profile? |
Would this be for CIBA only? There has been a lot of discussion above about using operator tokens in the Authorisation Code Flow (either as a |
I have not viewed ASAC as that specification that specifies this public mobile-OS API. Let's discuss this in ASAC. This issue assumes that the API consumer got the operatorToken. The question this issue is about is, how does the API consumer uses the operatorToken to get a CAMARA access token. The OIDC and CIBA parameter |
@JeanPaulAdant wrote:
DT's Android feature request is a feature request where we ask Google to implement the following method in Android.
This is no API that MNOs need to implement. The new API can be used by any mobile app. All it does is return the URL to the carrier's OpenId Configuration. If the MNO already uses OpenId, then all they might do is check their openid configuration as defined here. CIBA and other standards add their own fields to the openid configuration. Also please see OAuth2. There really is nothing the MNO has to do, if they already run an OpenId Provider. I think all Telcos who use OpenId should support the feature request. If you use OpenId, then please support (+1) the feature request. If something is unclear in the feature request, then please comment on it. |
When I talk about using the Once the operator token is supported in CIBA, the Authorization Code flow would no longer be necessary for number verification, as CIBA is simpler (no redirects) and solves the problem of navigation over WiFi. |
Thanks @garciasolero I understood you until your last point:
So my questions here are:
This last point relates to my comments above. I can see how the operator token can be used to identify the end user, but don't understand how it can be used to authenticate that end user if the scopes, client id etc. in the token are nothing to do with CAMARA. |
The public API requirements are specified on ASAC.OA section 5.2.1 TS.43 Client High level requirements. |
It could be relevant to add some requirements on operatorToken e.g scope and client_id of the operatorToken should be the same values that the scope and client_id from the camara request /authorize (or /bc.authorize) |
|
Thanks @garciasolero
That's the bit I was missing. So even though the token is opaque (because it is encrypted), the issuer can be determined from the token itself. So an operator token can only be used for APIs that are fulfilled by a mobile operator, as the authorisation request will be routed to that operator (as the issuer of the token). Does this routing have to be done by an aggregator? Or can the API consumer (i.e. application) determine this directly? |
In the defined multi-operator service model, all requests are routed through the aggregator. Therefore, only the aggregator will have access to the internal data of the operator token. For the application, this token is completely opaque and should be sent to the aggregator as-is in the request. |
I suggest to structure the discussion and address the various problem spaces separately and conclude on the different topics:
The different problems are illustrated on the diagram. |
Problem description
GSMA's TS.43 WG describes a process where an unprivileged 3rd-Party mobile app requests an operator token from the opertor's entitlement server. Operators have control over operator token issuance because of an TS.43 access_token that is validated at the entitlement server.
The operator token is an encrypted, selfcontained token which is usually encrypted to an entity that is dependent on clientId. The operatorToken can contain any information that is known by the Entitlement Server about the subscription.
The TS.43 flow works on any HTTPS connection e.g. on a Wifi connection in addition to On-Net scenarios.
Working with an operator token instead of MSISDN or device IP will add additional security.
As of today, the CIBA flow allows to pass a parameter called "login_hint_token", providing a potential mechanism for sending the operator token, however the AuthCode flow does not.
Possible evolution
Adding the operator-token to the URL on the access token request on the /authorize and /bc-authorize request will allow to send in the operator token in a standard compliant way.
Alternative solution
Another option would be to extend Authcode flow and CIBA flow with a new parameter, allowing to pass the operator_token. This parameter should be specific to the operator token and implicitly carry information about the format.
Additional context
The text was updated successfully, but these errors were encountered: