Project

General

Profile

Development #65942

idp_oidc : un client ayant accès à l’/api/users/ ne doit avoir accès qu’aux usagers s’étant déjà connecté chez lui

Added by Paul Marillonnet over 2 years ago. Updated over 1 year ago.

Status:
Fermé
Priority:
Normal
Category:
-
Target version:
-
Start date:
02 June 2022
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
No

Description

Suite de #65877 ; mais aussi assez indépendamment, dans la situation actuelle où OIDCClient.has_api_access == True signifie que c’est open-bar.


Files


Related issues

Related to Authentic 2 - Development #65877: idp_oidc : les hooks de l’api /users/ doivent tenir compte de la résolution des claims lorsque l’appelant est un client oidc connuEn cours01 June 2022

Actions
Related to Authentic 2 - Development #65943: idp_oidc : pour un usager donné, un client ayant accès à l’/api/users/ ne doit voir que les informations d’identité auxquelles il a accès dans la configuration oidcEn cours02 June 2022

Actions
Related to Authentic 2 - Development #66114: idp_oidc : effectuer systématiquement la réduction des informations retournées à un client en fonction des autorisations qu’il possèdeNouveau09 June 2022

Actions

Associated revisions

Revision 2bf67721 (diff)
Added by Paul Marillonnet over 1 year ago

idp_oidc: restrict client's returned qs to authorized users (#65942)

History

#1

Updated by Paul Marillonnet over 2 years ago

  • Related to Development #65877: idp_oidc : les hooks de l’api /users/ doivent tenir compte de la résolution des claims lorsque l’appelant est un client oidc connu added
#2

Updated by Paul Marillonnet over 2 years ago

  • Related to Development #65943: idp_oidc : pour un usager donné, un client ayant accès à l’/api/users/ ne doit voir que les informations d’identité auxquelles il a accès dans la configuration oidc added
#3

Updated by Paul Marillonnet over 2 years ago

#4

Updated by Benjamin Dauvergne over 2 years ago

  • Status changed from Solution proposée to En cours
  • Assignee set to Paul Marillonnet

Si le mode d'autorisation est par ou, l'autorisation est accrochée à l'ou pas au client et sur OU et OIDCClient tu as une GenericRelation 'oidc_authorizations' pour simplifier ta requête.

#5

Updated by Paul Marillonnet over 2 years ago

Benjamin Dauvergne a écrit :

Si le mode d'autorisation est par ou, l'autorisation est accrochée à l'ou pas au client et sur OU et OIDCClient tu as une GenericRelation 'oidc_authorizations' pour simplifier ta requête.

Bien vu, en effet c’est mieux comme ça.

#6

Updated by Benjamin Dauvergne over 2 years ago

  • Status changed from Solution proposée to En cours

Il faudrait garder le fastpath avant aussi.

#7

Updated by Paul Marillonnet over 2 years ago

J’ai l’impression que dans le cas général, Client.authorized_roles n’est pas défini. On se retrouve donc pris dans ce fastpath et le queryset n’est pas réduit.
Je peux adapter les tests pour définir authorized_roles sur la fixture oidc_client, mais je ne sais pas si ce sera représentatif de la réalité.

#8

Updated by Paul Marillonnet over 2 years ago

  • Related to Development #66114: idp_oidc : effectuer systématiquement la réduction des informations retournées à un client en fonction des autorisations qu’il possède added
#9

Updated by Paul Marillonnet over 2 years ago

  • Status changed from En cours to Solution proposée

Je laisse en solution proposée en attendant, car je ne vois pas comment le fastpath peut arriver avant.

#10

Updated by Benjamin Dauvergne about 2 years ago

  • Status changed from Solution proposée to Solution validée

C'est ça que j'aurai aimé garder avant, pour voir clairement les cas où on ne touche à rien, ensuite avoir tout le spécifique OIDC / User.

        # fast path
        if not issubclass(qs.model, User):
            return qs
        client = ....
        if client is None:
            return qs

#11

Updated by Paul Marillonnet over 1 year ago

Benjamin Dauvergne a écrit :

C'est ça que j'aurai aimé garder avant, pour voir clairement les cas où on ne touche à rien, ensuite avoir tout le spécifique OIDC / User.
[...]

Ok, simplement il y a le if client.authorized_roles.exists(): qui doit rester en dessous de la modification du queryset propre à ce ticket. Je vais pousser cette version en remontant le fastpath qui ne contiendra alors plus que

+        # fast path
+        if not issubclass(qs.model, User) or client is None:
+            return qs
+

#12

Updated by Paul Marillonnet over 1 year ago

  • Status changed from Solution validée to Résolu (à déployer)
commit 2bf67721b7731a124512f0ff01d9e67457af5065
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Thu Jun 2 17:28:32 2022 +0200

    idp_oidc: restrict client's returned qs to authorized users (#65942)
#13

Updated by Transition automatique over 1 year ago

  • Status changed from Résolu (à déployer) to Solution déployée
#14

Updated by Transition automatique over 1 year ago

Automatic expiration

Also available in: Atom PDF